2017-02-12 55 views
-3

在我的控制器我有一個看起來像這樣的方法:的LINQ to查看MVC

var CarModelAndGear = from search in entity.CarsCategories 
            where search.ID == CarCategoryId[0] 
            select new { search.Manufacturer, search.Model, search.Gear }; 

我試圖讓這個語句的視圖的輸出..

ViewData["somename"] = CarModelAndGear; 

這種方式不會工作..我得到一個錯誤「LINQ to實體無法識別方法Int32 get_Item(Int32)'方法,並且此方法不能轉換爲商店表達式」 如何獲取' CarModelAndGear'的觀點?

+1

這種方式將無法正常工作......描述您的問題,而不是使用一般性陳述來解決您的問題。 –

回答

0

創建一個模型你的結果

public class CarViewResult 
{ 
    public string Manufacturer { get; set; } 
    public string Model { get; set; } 
    public string Gear { get; set; } 

    public CarViewResult(string manufacturer, string model, string gear) 
    { 
     this.Manufacturer = manufacturer; 
     this.Model = model; 
     this.Gear = gear; 
    } 
} 

添加新的模型添加到您的LINQ查詢

var CarModelAndGear = from search in entity.CarsCategories 
         where search.ID == CarCategoryId[0] 
         select new CarViewResult(search.Manufacturer, search.Model, search.Gear); 

ViewData["somename"] = CarModelAndGear.ToList(); 
2

您需要的類別首先存儲在一個變量,因爲供應商無法解釋列表索引器方法:

int CatId = CarCategoryId[0]; 
var CarModelAndGear = from search in entity.CarsCategories 
         where search.ID == CatId 
         select new { search.Manufacturer, search.Model, search.Gear }; 
0

您在這裏使用LinqToSql。所以它試圖將Linq表達式轉換爲SQL語句。

雖然您可以從C#訪問集合中的項目,但無法將其翻譯爲SQL,因此它會翻倒。

試試這個比較:

var id = CarCategoryId[0]; 
var CarModelAndGear = from search in entity.CarsCategories 
            where search.ID == id 
            select new { search.Manufacturer, search.Model, search.Gear }; 
0

可以執行LINQ,然後分配到的ViewData

ViewData["somename"] = CarModelAndGear.ToList(); 

但我更喜歡的方式通過live2,當你將結合一切模型,然後通過描述模型