修改LINQ查询的排序顺序

时间:2009-04-11 16:36:35

标签: linq

我希望以下LINQ查询根据FirstName排序,但OrderBy扩展方法似乎没有效果。

DataClassesDataContext dc = new DataClassesDataContext();

var query = from contact in dc.Contacts
            select contact;

query.OrderBy(c => c.FirstName);

当我在初始查询定义中包含orderby时,一切正常,但我希望能够在我的代码中稍后根据条件对其进行修改。

知道为什么这不起作用吗?

3 个答案:

答案 0 :(得分:11)

尝试使用

query = query.OrderBy(c => c.FirstName);

var sortedQuery = query.OrderBy(c => c.FirstName);

OrderBy创建一个新序列。

答案 1 :(得分:7)

问题是OrderBy没有修改现有查询。相反,它正在创建一个新查询,用于对查询中的值进行排序。您需要捕获此结果

var sortedQuery = query.OrderBy(c => c.FirstName);

几乎每个LINQ运算符都是如此。实际上并没有修改有问题的查询。相反,他们将查询结果过滤或投影到新的查询值中,并从方法中返回。

答案 2 :(得分:7)

除了@Mike Two的回复之外,请记住要有多种排序,你需要在最初的OrderBy之后使用它然后才能使用它,否则你只需要替换第一个排序。

var query = from contact in dc.Contacts
        select contact;

query = query.OrderBy(c => c.FirstName); 
query = query.ThenBy(c => c.LastName);

foreach (var contact in query)
{
  ...
}

实际上,我的偏好是使用扩展方法将它们全部链接在一起,但是显然如果你需要使它们成为条件,这将不起作用。

var query = dc.Contacts
              .OrderBy( c => c.FirstName )
              .ThenBy( c => c.LastName );

foreach (var contact in query)
{
   ...
}