2012-08-29 84 views
2

我有一个List<Employees>集合,我试图选择Active雇员。Linq Query OrderBy Multiple

我必须做一些错误的,因为我看到这里表明我能做到这一点的例子不胜枚举,但Visual Studio是告诉我,我不能因为:

无法隐式转换类型“System.Linq的.IOrderedEnumerable'改为'System.Collections.Generic.List'。存在明确的转换(您是否缺少演员?)

此图片有什么问题? LastNameFirstName(如您可能会怀疑的)都是字符串值,并且Active是布尔值。

range variable

,如果你想要的结果作为一个列表
DataGridView1.DataSource = null; 
List<AcpEmployee> emps = from e in employeeInfo.Employees 
         where e.Active 
         orderby e.LastName, e.FirstName descending 
         select e; 
+0

[OrderBy和List与IOrderedEnumerable]可能重复(http://stackoverflow.com/questions/9285426/orderby-and-list-vs-iorderedenumber) – nawfal

回答

4

只需追加一个ToList()来查询。或者简单地声明环境管理计划为var emps这将有一个类型IOrderedEnumerable

9

你应该在你的查询的末尾使用ToList

List<AcpEmployee> emps = ( from e in employeeInfo.Employees 
          where e.Active 
          orderby e.Active orderby e.LastName, e.FirstName descending 
          select e).ToList(); 

直接使用方法或:

List<AcpEmployee> emps = employeeInfo.Employees 
    .Where(e => e.Active) 
    .OrderBy(e => e.LastName) 
    .ThenByDescending(e => e.FirstName) 
    .ToList(); 
1

这一直answered here before,只需在linq中使用orderby关键字

var emps = from e in employeeInfo.Employees 
      where e.Active orderby e.LastName thenby e.FirstName select e; 
+1

'orderby'或'thenby'?它仍然会给出错误,因为我的代码特别试图将它分配给'List '。 – jp2code

+1

啊,我错过了那个任务,L.B是正确的然后只是添加.ToList() – lucusc