我期望以下LINQ查询根据FirstName排序,但OrderBy扩展方法似乎没有效果.
DataClassesDataContext dc = new DataClassesDataContext();
var query = from contact in dc.Contacts
select contact;
query.OrderBy(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)
当我在初始查询定义中包含orderby时,一切正常,但我希望能够在我的代码中稍后根据条件对其进行修改.
知道为什么这不起作用吗?
Mik*_*Two 11
尝试使用
query = query.OrderBy(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)
要么
var sortedQuery = query.OrderBy(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)
OrderBy创建一个新序列.
问题是OrderBy没有修改现有的查询.相反,它正在创建一个新查询,用于对查询中的值进行排序.您需要捕获此结果
var sortedQuery = query.OrderBy(c => c.FirstName);
Run Code Online (Sandbox Code Playgroud)
几乎每个LINQ运算符都是如此.实际上并没有修改有问题的查询.相反,他们将查询结果过滤或投影到新的查询值中,并从方法中返回.
除了@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)
{
...
}
Run Code Online (Sandbox Code Playgroud)
实际上,我的偏好是使用扩展方法将它们全部链接在一起,但显然如果你需要使它们成为有条件的,这将不起作用.
var query = dc.Contacts
.OrderBy( c => c.FirstName )
.ThenBy( c => c.LastName );
foreach (var contact in query)
{
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7607 次 |
最近记录: |