2017-02-12 46 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,当你将结合一切模型,然后通过描述模型