2010-12-10 75 views
0

我有這樣的代碼:LINQ:返回var-value?

public static List<object> GetInbox(Guid id) 
    { 
     using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()) 
     { 
      List<object> query = from pm in dc.PrivateMessages 
         join user in dc.Users 
         on pm.Sender equals user.UserID 
         select new 
         { 
          SenderName = user.Username 
         }; 


      return query; 

     } 
    } 

這是行不通的。

錯誤1無法隱式轉換類型 'System.Linq.IQueryable' 到 'System.Collections.Generic.List'。存在明確的轉換(您是否缺少演員?)O:\ Flirt4Date \ Flirt4Date \ DAL \ PrivateMessageHandling.cs 69 29 DAL

那麼,該怎麼辦? 我知道,一個可能的選項是編寫一個類,並給出一個列表,但我有這樣的查詢houndrets,我會很高興,如果我可以有一個通用的解決方案...

+0

可能匿名的對象不是序列化的,但是你想怎樣安全地消耗你的返回值不知道的返回類型?你不能迭代它們並說foreach(列表中的var項){Console.WriteLine(item。????)} – 2010-12-10 10:35:12

+0

[LINQ to SQL:Return anonymous type?]可能重複(http://stackoverflow.com /問題/ 534690/LINQ到SQL回報匿名型) – nawfal 2013-02-12 17:45:35

回答

4

更改您的代碼於:

List<object> query = (from pm in dc.PrivateMessages 
        join user in dc.Users 
        on pm.Sender equals user.UserID 
        select new 
        { 
         SenderName = user.Username 
        }).ToList(); 

或更改功能:

public static IEnumerable<object> GetInbox(Guid id) 
{ 
    using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()) 
    { 
     IEnumerable<object> query = from pm in dc.PrivateMessages 
        join user in dc.Users 
        on pm.Sender equals user.UserID 
        select new 
        { 
         SenderName = user.Username 
        }; 


     return query; 

    } 
} 
1

你的查詢返回一個IQueryable;您需要使用ToList運算符將查詢結果轉換爲列表<>類型,使用ToList運算符

1

Linq查詢返回的值是IQueryable類型,要將其轉換爲List,您必須創建一個List新的List將對象傳遞給構造函數。

試試這個:

var result = from pm in dc.PrivateMessages ... 

List<object> query = new List<object>(result); 

...或使用ToList()擴展方法在其他答覆建議。

-1

你也可以使用「var query」,而不是「List<object> query」作爲返回的其實並不是一個真正的List<object>

0

你returing查詢變量,因爲LINQ的是基於遞延執行概念,即存儲在查詢查詢變量不會eveluated直到你調用這個像一些迭代器(ToList(),ToDictionary(),指定者(),COUNT()等)

所以chnage代碼有點會像這樣

public static List<object> GetInbox(Guid id) 
    { 
     using (Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()) 
     { 
      List<object> query = (from pm in dc.PrivateMessages 
         join user in dc.Users 
         on pm.Sender equals user.UserID 
         select new 
         { 
          SenderName = user.Username 
         }).ToList(); 


      return query; 

     } 
    } 
0

你想使用延遲執行還是想立即運行查詢?如果你想推遲執行返回一個IQueryable或IEnumerable,否則返回一個List。

如果推遲小心了「使用Flirt4dateDBDataContext dc = new Flirt4dateDBDataContext()」塊,查詢執行前,可能處置的DataContext。已創建並送回給調用者