OrderBy如何应用?

时间:2014-09-03 21:13:10

标签: c# .net linq entity-framework

我有以下查询:

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()

如果它是第二种情况,有没有办法让它全部一个查询?我只需要第一个项目,返回所有结果将非常无效。

3 个答案:

答案 0 :(得分:1)

好吧,尝试OrderBy应用于原始查询,因为您仍在使用IQueryable - 这意味着它尚未转换为{{1使用IEnumerable或等效的水合物或水合物。

是否可以取决于生成的查询的复杂性。你必须尝试找出来。我的猜测是它会将主查询转换为ToList外部查询的子查询和图层。

答案 1 :(得分:1)

鉴于您的具体示例,在这种情况下,大多数情况下,作为表达式树的一部分,当它构建时,它可能会被应用于LINQ查询生成的sql,如果您将其转换为Enumarable与另一个答案中提到的ToList一样,Order by将作为Enumerable的扩展应用。

答案 2 :(得分:0)

可能会使用可读代码,因为在您编写代码时这是不可理解的。 使用linq语句将来会遇到问题。问题是,如果您的语句没有返回任何值,则该值将为null,并且每当您生成异常时。

你必须小心。 我建议你分别做一切来理解代码朋友。