gpt4 book ai didi

c# - 是否有使用查询语法在 LINQ 查询中执行 ToList 的巧妙方法?

转载 作者:可可西里 更新时间:2023-11-01 08:25:08 25 4
gpt4 key购买 nike

考虑下面的代码:

StockcheckJobs = 
(from job in (from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by new { stockcheckItem.JobId, stockcheckItem.JobData.EngineerId } into jobs
select jobs).ToList()
let date = MJM.GetOrCreateJobData(job.Key.JobId).CompletedJob.Value
orderby date descending
select new StockcheckJobsModel.StockcheckJob()
{
JobId = job.Key.JobId,
Date = date,
Engineer = (EngineerModel)job.Key.EngineerId,
MatchingLines = job.Count(sti => sti.Quantity == sti.ExpectedQuantity),
DifferingLines = job.Count(sti => sti.Quantity != sti.ExpectedQuantity)
}).ToList()

中间有一个ToList(),因为GetOrCreateJobData方法不能转成sql。

因此,我不得不将查询的第一部分括在方括号中才能执行此操作,然后我使用外部查询来完成。

我知道我可以将其拆分为两个变量,但我不想这样做(这也在对象初始化程序中)。

当我必须执行 ToList(或以其他方式进入 linq- to-objects) 在 linq 查询中间?


在一个理想的世界里,我想要这样的东西(尽可能接近):

StockcheckJobs =
from stockcheckItem in MDC.StockcheckItems
where distinctJobs.Contains(stockcheckItem.JobId)
group stockcheckItem by new { stockcheckItem.JobId, stockcheckItem.JobData.EngineerId } into jobs
MAGIC_DO_BELOW_AS_LINQ-TO-OBJECTS_KEYWORD_OR_SYNTAX
let date = MJM.GetOrCreateJobData(jobs.Key.JobId).CompletedJob.Value
orderby date descending
select new StockcheckJobsModel.StockcheckJob()
{
JobId = jobs.Key.JobId,
Date = date,
Engineer = new ThreeSixtyScheduling.Models.EngineerModel() { Number = jobs.Key.EngineerId },
MatchingLines = jobs.Count(sti => sti.Quantity == sti.ExpectedQuantity),
DifferingLines = jobs.Count(sti => sti.Quantity != sti.ExpectedQuantity)
};

最佳答案

您可以解决 GetOrCreateJobData 无法翻译成 SQL 的问题。

通过为指定的方法调用表达式实现自定义查询转换器,您可以控制 LINQ-to-SQL 解释方法的方式。有一篇很好的文章解释了这个过程并链接到可用的相关资源:http://www.codeproject.com/Articles/32968/QueryMap-Custom-translation-of-LINQ-expressions

或者,您可以将 GetOrCreateJobData 方法重构为使用表达式构建相同逻辑的扩展方法,以便 LINQ-to-SQL 可以自然地解释它。根据方法的复杂性,这可能比我的第一个建议更可行或更不可行。

关于c# - 是否有使用查询语法在 LINQ 查询中执行 ToList 的巧妙方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com