我有以下查询:
var vendors = (from pp in this.ProductPricings
join pic in this.ProductItemCompanies
on pp.CompanyId equals pic.CompanyId into left
from pic in left.DefaultIfEmpty()
orderby pp.EffectiveDate descending
group pp by new { pp.Company, SortOrder = (pic != null) ? pic.SortOrder : short.MinValue } into v
select v).OrderBy(z => z.Key.SortOrder);
有谁知道最后OrderBy()
是如何应用的?这是否成为SQL查询的一部分,或者是所有结果都加载到内存中然后传递给OrderBy()
?
如果它是第二种情况,有没有办法让它全部一个查询?我只需要第一个项目,返回所有结果将非常无效。
答案 0 :(得分:1)
好吧,尝试将OrderBy
应用于原始查询,因为您仍在使用IQueryable
- 这意味着它尚未转换为{{1使用IEnumerable
或等效的水合物或水合物。
是否可以取决于生成的查询的复杂性。你必须尝试找出来。我的猜测是它会将主查询转换为ToList
外部查询的子查询和图层。
答案 1 :(得分:1)
鉴于您的具体示例,在这种情况下,大多数情况下,作为表达式树的一部分,当它构建时,它可能会被应用于LINQ查询生成的sql,如果您将其转换为Enumarable与另一个答案中提到的ToList一样,Order by将作为Enumerable的扩展应用。
答案 2 :(得分:0)
可能会使用可读代码,因为在您编写代码时这是不可理解的。 使用linq语句将来会遇到问题。问题是,如果您的语句没有返回任何值,则该值将为null,并且每当您生成异常时。
你必须小心。 我建议你分别做一切来理解代码朋友。