2017-10-18 68 views
0

我试图运行Linq,它抛出一个异常,指出:错误Linq中 - 无法翻译成商店表达

LINQ到实体无法识别方法“System.Collections.Generic.List` 1 [ECommerceApp.Models.CategoryList] CategoryDe​​tails()'方法,并且此方法不能转换为商店表达式。

以下是定义的类:

public class ProductDetails : Products 
{ 
    public string ParentCatName { get; set; } 
    public string ChildCatName { get; set; } 
    public string ImagePath { get; set; } 
    public List<CategoryList> Categories { get; set; } 
} 

public class CategoryList 
{ 
    public string Category { get; set; } 
    public string SubCategory { get; set; } 
    public string ParentCategory { get; set; } 
} 

我已经显示在主页上的所有类别,并在类属的,因此,定义的列表。以下是Linq

public ActionResult Index() 
{ 
    var result = (from c in db.Products 
        select new ProductDetails 
        { 
        ProductName = c.ProductName, 
        Price = c.Price, 
        Categories = CategoryDetails() //Throws exception here and I tried to convert it to ToList() but doesn't work 
        }).ToList(); 

    return View(result); 
} 

public List<CategoryList> CategoryDetails() 
{ 
    List<CategoryList> result = aGateway.GetAllCategories().ToList(); 
    return result; 
} 

最后在视图中,我试图访问类的细节与foreach循环如下:

@item.Categories[0].Category 
@item.Categories[0].SubCategory 
@item.Categories[0].ParentCategory 

这有什么,我很想念?

+0

所以每个产品只分配了所有类别的同一个列表? – Equalsk

+2

你有没有试过直接做Categories = aGateway.GetAllCategories()。ToList()? – Homerothompson

+0

其实不是,它们是单独定义的。但我的要求是在侧边栏@Equalsk中显示所有类别和子类别。 –

回答

1

像这样的东西应该工作:

var result = (from c in db.Products 
        select new ProductDetails 
        { 
        ProductName = c.ProductName, 
        Price = c.Price, 
        Categories = null 
        }).ToList(); 
foreach (var c in result) 
    { 
     c.Categories= CategoryDetails(); 
    } 
    return View(result); 

如果这不起作用,请定义结果的类,并且不要在linq查询中指定categories属性

+0

完美工作@gnsanty。非常感谢。 –

1

尝试像先取出类别查询外,并将它们存储在一个集合中,那么集合分配到新创建的产品详细

public ActionResult Index() 
{ 
    var cats = CategoryDetails(); 
    var result = (from c in db.Products 
        select new ProductDetails 
        { 
        ProductName = c.ProductName, 
        Price = c.Price, 
        Categories = cats 
        }).ToList(); 

    return View(result); 
} 

public List<CategoryList> CategoryDetails() 
{ 
    List<CategoryList> result = aGateway.GetAllCategories().ToList(); 
    return result; 
} 
1

gnsanty答案的工作,但如果你使用LINQ,有在这种情况下,没有理由使用foreach语句:

var result = (from c in db.Products 
       select new ProductDetails 
       { 
       ProductName = c.ProductName, 
       Price = c.Price, 
       Categories = null 
       }) 
    .ToList() // Execute the query before updating the property 
    .Select(pd => { 
    pd.Categories = CategoryDetails(); 
    return pd; 
    }) 
    .ToList(); 
+0

啊!谢谢@Erik Philips。我真的很感谢你的答案,只是运行它。 –

+0

gnsanty的答案绝对没有错,如果可以的话,我宁愿留在linq语句中。我觉得这比较容易阅读,但这只是我的看法。我怀疑它编译后有什么不同。 –

相关问题