var quotaabovelist = await PcmRepository().FindListByQueryable<QuotaAboveEntity>(q => q .Includes(q => q.PatrolLogList.Where(p => p.IsAble == true).OrderByDescending(p => p.CreateTime).ToList()) //.Includes(q => q.ProcessGeoRelList.Where(pgr => pgr.IsAble == true).OrderByDescending(pgr => pgr.ModifyTime).ToList(), pgr => pgr.Geo) //.Includes(q => q.ProcessGeoRelList.Where(r => r.IsAble == true).OrderByDescending(r => r.CreateTime).Take(1).ToList(), r => r.Geo) .Where(expression) .WhereIF(!string.IsNullOrEmpty(queryParams.ProblemTypeCode), q => q.PatrolLogList.Any(p => p.ProblemTypeCode.Equals(queryParams.ProblemTypeCode))) .WhereIF(queryParams.CheckStatus == "IncompleteCheck", q => q.ProjectStatusCode != "Finished" && q.ProjectStatusCode != "NotStarted" && !q.PatrolLogList.Any(p => p.DealStatus == "IncompleteDisposal")) .WhereIF(queryParams.CheckStatus == "CompleteCheck", q => q.PatrolLogList.Count() > 0) .WhereIF(queryParams.DealStatus == "IncompleteDisposal", q => q.PatrolLogList.Any(p => p.DealStatus == "IncompleteDisposal" && p.IsSiginin != true)) .WhereIF(queryParams.DealStatus == "submitted", q => q.PatrolLogList.Any(p => p.DealStatus == "submitted" && p.IsSiginin != true)) .WhereIF(queryParams.DealStatus == "completeDisposal", q => !q.PatrolLogList.Any(p => p.DealStatus == "IncompleteDisposal") && q.PatrolLogList.Count() > 0) .WhereIF(queryParams.IsSubmission == true, q => q.PatrolLogList.Any(p => p.IsSubmission == true)) .WhereIF(queryParams.IsSubmission == false, q => q.PatrolLogList.Any(p => p.IsSubmission == false)) .Select(q => new QuotaAboveEntity { Id = q.Id.SelectAll(), CheckTotalCount = q.PatrolLogList.Count(), ProblemTypeNameList = q.PatrolLogList.Where(p => p.DealStatus == "IncompleteDisposal").Select(p => p.ProblemTypeName).ToList(), LastPatrolLogInfo = q.PatrolLogList.FirstOrDefault(), }), pagination);
这段代码是一个使用C#语言编写的异步查询方法,它使用了Entity Framework Core的LINQ查询语法来从数据库中检索数据。这个方法似乎是用于检索QuotaAboveEntity
实体的列表,并且根据传入的查询参数queryParams
和表达式expression
来过滤结果。以下是代码的主要组成部分的解释:
-
PcmRepository().FindListByQueryable<QuotaAboveEntity>(...)
: 这是一个异步方法调用,用于执行查询并返回QuotaAboveEntity
类型的列表。 -
Includes(...)
: 这个方法用于指定要包含的导航属性。在这个例子中,它包括了PatrolLogList
属性,并且只包括那些IsAble
属性为true
的记录,并且按照CreateTime
降序排序。 -
Where(...)
: 这些方法用于添加过滤条件到查询中。例如,Where(expression)
添加了一个基于expression
参数的过滤条件。 -
WhereIF(...)
: 这些方法用于在条件满足时添加过滤条件。例如,如果queryParams.ProblemTypeCode
不为空,就添加一个过滤条件来检查PatrolLogList
中是否有匹配的ProblemTypeCode
。 -
Select(...)
: 这个方法用于指定查询结果的投影。在这个例子中,它创建了一个新的QuotaAboveEntity
对象,包含了Id
、CheckTotalCount
、ProblemTypeNameList
和LastPatrolLogInfo
属性。 -
pagination
: 这可能是一个分页参数,用于控制查询结果的分页。 -
代码中有几个注释掉的
Includes
方法调用,这表明在某些情况下,可能需要包含额外的导航属性,例如ProcessGeoRelList
。 -
代码中使用了
SelectAll()
方法,这可能是一个自定义的扩展方法,用于选择所有属性。 -
代码中使用了
FirstOrDefault()
方法来获取PatrolLogList
中的第一个元素,这可能是用于获取最后一条巡逻日志信息。
请注意,这段代码可能需要根据实际的数据库模型和业务逻辑进行调整。如果你有任何具体的问题或需要帮助,请随时告诉我。