2012-04-01 73 views
0

我正在爲我的項目使用View/Presenter結構。該項目是一個有OrderedItems和Products的電子商務網站。 當致電GetOrdersItemsByOrderID(orderID),我得到一個LINQ錯誤。Linq使用內部方法錯誤選擇 - LINQ to Entities不能識別方法

LINQ to Entities無法識別方法'DAL.Views.ProductView GetProductBySku(System.String)'方法,並且此方法無法轉換爲商店表達式

我知道,LINQ不喜歡它的查詢中dynaimc內容所以proplem是SELECT 產品= Presenters.ProductsPresenter.GetProductBySku(c.productSKU)

我不知道如何構建GetOrdersItemsByOrderID TOLIST同時也有另一種方法GetProductBySku填充字段產品詳情

/----------------/

public static List<OrderItemsView> GetOrdersItemsByOrderID(int orderID) 
{ 
    using (var ctx = new ProductEntities()) 
{ 

    var result = ctx.OrderedItems.Where(o => o.orderID == orderID) 
     .Select(c => new OrderedItemsView 
         { 
          OrderItemID = c.orderItemID, 
          OrderID = c.orderID, 
          ProductSku = c.productSKU, 
          ProductPrice = c.productPrice, 
          ProdQuantity = c.prodQuantity, 
          ProductDetail = Presenters.ProductsPresenter.GetProductBySku(c.productSKU) 
         }).ToList(); 
    return result; 
    } 
} 

/----- -----------/

public class OrderedItemsView 
    { 
     public int OrderItemID { get; set; } 
     public int OrderID { get; set; } 
     public string ProductSku { get; set; } 
     public decimal ProductPrice { get; set; } 
     public int ProdQuantity { get; set; } 
     public decimal? ProductWeight { get; set; } 

     public ProductView ProductDetail { get; set; } <-- Get Product Details 
    } 

/----------------/

public static Views.ProductView GetProductBySku(string sku) 
    { 
    using (GroupProductEntities ctx = new GroupProductEntities()) 
    { 
     //-------------------------------------------------------------------// 
     var results = 
      ctx.Products.Where(p => p.clientID == Config.ClientID && p.productSKU == sku) 
      .Select(p => new Views.ProductView 
          { 
           ProductID = p.productID, 
           ClientID = p.clientID, 
           CategoryID = p.categoryID, 
           ProductName = p.productName, 
           ProductImage1 = p.productImage1, 
           ProductPrice = p.productPrice, 
           ProductInventory = p.productInventory, 
           ProductSku = p.productSKU, 
          }).FirstOrDefault(); 
     return results; 
    } 
} 

/----- -----------/

public class ProductView 
{ 
    public int ProductID { get; set; } 
    public int? CategoryID { get; set; } 
    public string ProductName { get; set; } 
    public string ProductShortDesc { get; set; } 
    public string ProductImage1 { get; set; } 
    public decimal? ProductPrice { get; set; } 
    public decimal? ProductInventory { get; set; } 
    public string ProductSku { get; set; } 
} 

/----------------/

回答

2

您也許能增加閃避在您調用該方法之前執行查詢的「ToList」。

試試這個:

var result = ctx.OrderedItems.Where(o => o.orderID == orderID).ToList() 
     .Select(c => new OrderedItemsView 
         { 
          OrderItemID = c.orderItemID, 
          OrderID = c.orderID, 
          ProductSku = c.productSKU, 
          ProductPrice = c.productPrice, 
          ProdQuantity = c.prodQuantity, 
          ProductDetail = Presenters.ProductsPresenter.GetProductBySku(c.productSKU) 
         }); 

我搬到你ToList()了一下。您也可能還需要在選擇結束時使用一個。

+0

是的。如果'OrderedItems'聽起來像,那麼這段代碼就會死在任何真實的數據上。 – 2012-04-01 16:00:04

+0

我假設.ToList()在「Where」之後的位置將被適當限制。 – Robaticus 2012-04-01 16:01:17

+0

哦,好點。 – 2012-04-01 16:01:47

相關問題