2017-10-18 69 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語句中。我覺得這比較容易閱讀,但這只是我的看法。我懷疑它編譯後有什麼不同。 –

相關問題