我有一个List<Employees>
集合,我正在尝试选择Active
名员工。
我一定做错了,因为我在这里看到很多例子表明我可以做到这一点,但Visual Studio告诉我我不能因为:
无法将类型'System.Linq.IOrderedEnumerable'隐式转换为'System.Collections.Generic.List'。存在显式转换(您是否错过了演员?)
这张照片出了什么问题? LastName
和FirstName
(您可能怀疑)都是字符串值,Active
是布尔值。
DataGridView1.DataSource = null;
List<AcpEmployee> emps = from e in employeeInfo.Employees
where e.Active
orderby e.LastName, e.FirstName descending
select e;
答案 0 :(得分: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 :(得分:4)
如果您希望将结果作为列表,只需将ToList()附加到查询中即可。或者简单地将emps声明为var emps
,其类型为IOrderedEnumerable
答案 2 :(得分:1)
这是answered here before,只需在linq中使用orderby关键字
var emps = from e in employeeInfo.Employees
where e.Active orderby e.LastName thenby e.FirstName select e;