2010-10-08 39 views
3
List<MyObject> objects = (from a in alist 
    join b in blist on a.ID equals b.ID 
    where a.Number != 4 
    orderby b.Rank, a.CustomField 
    select a).ToList(); 

这是我的查询,我想为CustomField属性使用自定义比较器。有没有办法做到这一点在两个领域的秩序?Linq order by两列自定义比较器排序

我能够做到这一点:

List<MyObject> objects = objects.OrderBy(a => a.CustomField, new MyComparer<object>()) 

,但我需要它由两个s.Rank和a.CustomField进行排序。通过Rank场与自定义比较

List<MyObject> objects = objects 
    .OrderBy(a => a.Rank) 
    .ThenBy(a => 
     a.CustomField, new MyComparer<object>() 
    ).ToList(); 

它首先排序,然后通过CustomField

回答

8

使用OrderBy()ThenBy()一起使用您的自定义比较器。

// I'm pretty sure it is not possible to specify 
// your custom comparer within a query expression 
List<MyObject> objects = (from a in alist 
          join b in blist on a.ID equals b.ID 
          where a.Number != 4 
          select new { a, b }) 
         .OrderBy(o => o.b.Rank, new MyRankComparer()) 
         .ThenBy(o => o.a.CustomField, new MyComparer<object>()) 
         .Select(o => o.a) 
         .ToList(); 
+0

我会选择你作为正确答案,因为你是第一个,但我也用使用而不是第二排序依据ThenBy亚历克斯的建议。 – morsanu 2010-10-08 14:23:32

+0

对不起,我_did_的意思是'.OrderBy()。ThenBy()'但错误输入了示例代码。必须看起来很奇怪,才能在解释中看到类型,但在示例中没有使用它。 :) – 2010-10-08 15:35:04

5

试试这个。