我希望以下LINQ查询根据FirstName排序,但OrderBy扩展方法似乎没有效果。
DataClassesDataContext dc = new DataClassesDataContext();
var query = from contact in dc.Contacts
select contact;
query.OrderBy(c => c.FirstName);
当我在初始查询定义中包含orderby时,一切正常,但我希望能够在我的代码中稍后根据条件对其进行修改。
知道为什么这不起作用吗?
答案 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)
{
...
}