2009-07-08 112 views
2

我在C#中使用ASP.net MVC。爲什麼這是代碼:在ASP.NET MVC中傳遞匿名類型

public IQueryable<Product> ListProducts(string prodcutType) 
{ 
    var results = from p in db.Products 
     join s in db.Stocks 
     on p.ID equals s.IDProduct 
     where p.ptype == prodcutType 
     select new { s.width, s.height, s.number};     
    return results; 
} 

顯示以下錯誤?

錯誤1無法隱式轉換類型 System.Linq.IQueryable<AnonymousType#1>System.Linq.IQueryable<eim.Models.Product>。 的顯式轉換存在(是否 缺少強制轉換?)

回答

8

因爲select new { s.width, s.height, s.number}意味着System.Linq.IQueryable<AnonymousType#1>但你的函數需要返回IQueryable<Product>。你的代碼更改爲:

public IQueryable<Product> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select p; 
    return results; 
} 

更新:

或者,也許你想IQueryable<Stock>

public IQueryable<Stock> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select s; 
    return results; 
} 

如果你想只有3個屬性width +高度+號創建新的類型。例如:

public class SomeType { 
    public int Width { get; set; } 
    public int Height { get; set; } 
    public int Number { get; set; } 
} 

public IQueryable<SomeType> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select new SomeType { 
         Width = s.width, 
         Height = s.height, 
         Number = s.number 
        }; 
    return results; 
} 
1

您的LINQ查詢的最後一行

select new { s.width, s.height, s.number};  

將只選擇從表中「db.Stocks」這三個領域,這將創建一個新的,匿名類型,這是存儲在「結果」中並傳回的內容。

你在「返回結果」中傳回的內容;陳述因此不是 a IQueryable<Product> - 它是完全不同的(即一個匿名類型的IQueryable)。

如果您想要返回產品,您需要將該匿名類型轉換爲「產品」(或從所選字段中創建一個新產品類別)。

Marc