2014-05-22 59 views
5

如何返回包含LINQ to SQLquery結果的列表?我正在嘗試這個實現,但我得到了這個錯誤。如何從C#中的方法返回列表

無法隱式轉換類型 'System.Collections.Generic.List<AnonymousType#1>''System.Collections.Generic.List<object>

任何幫助,將不勝感激。

public List<Object> getShoes() 
{ 
    var query = from b in db.BrandTbls.AsQueryable() 
       join m in db.ShoeModelTbls on b.BrandID equals m.BrandID 
       join s in db.ShoeTbls on m.ModelID equals s.ModelID 
       join i in db.ShoeImageTbls on s.ShoeID equals i.ShoeID 
       select new { s.ShoeID, s.Size, s.PrimaryColor, s.SecondaryColor, s.Quantity, m.ModelName, m.Price, b.BrandName, i.ImagePath }; 

    return query.ToList(); 
} 
+2

你可以做'返回query.Select(T => (對象)T).ToList();'。 –

+1

@UlugbekUmirov然後它會編譯,但此方法的用戶將無法有效地使用它。 – Servy

+0

僅供參考......請檢查此[老答案](http://stackoverflow.com/a/6830406/982431)... – HuorSwords

回答

13

匿名類型是專門設計用於完全在它們被定義的範圍內。如果您想從此方法返回查詢結果,則應創建一個新的命名類型來表示查詢結果,並選擇該命名類型的實例,而不是匿名類型的實例。

+0

明白了!謝謝。 – Tartar

3

你不能返回一個List,其中T是一個匿名類型;你需要返回一個已知的類型。你可以創建一個類

public class MyResult 
{ 
    public string ShoeID {get; set;} 
    public string Size {get; set;} 
    public string PrimaryColor {get; set;} 
    public string SecondaryColor {get; set;} 
    public string Quantity {get; set;} 
    public string ModelName {get; set;} 
    public string Price {get; set;} 
    public string BrandName {get; set;} 
    public string ImagePath {get; set;} 
} 

然後改變你的選擇,像這樣

select new MyResult { ShoeID = s.ShoeID, Size = s.Size, PrimaryColor = s.PrimaryColor ........ }; 

和你的方法簽名會改變到

public List<MyResult> getShoes() 
+0

+1代碼來補充Servy的解釋。 –

+0

+1。確切地說,你可以返回「列出T是匿名類型的列表」,但是還需要在方法外部傳遞這樣的匿名類型。 'List MyMethod (T fake){return Enumerable.Repeat(new {Field1:100},10).ToLsit();} ... var list = MyMethod(new {Field1 = 42})' –