2012-08-29 83 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