2012-04-01 21 views
0

私のプロジェクトにView/Presenter構造を使用しています。このプロジェクトは、OrderedItemsとProductsがあるe-commサイトです。 GetOrdersItemsByOrderID(orderID)を呼び出すと、LINQエラーが発生します。Linq内部メソッドエラーで選択 - LINQ to Entitiesがメソッドを認識しません

LINQ to Entitiesは、 'DAL.Views.ProductView GetProductBySku(System.String)'メソッドを認識せず、このメソッドをストア式に変換することはできません。

は、私はproplemが、私はGetOrdersItemsByOrderID ToListメソッドを構築する方法を知らないSELECT 製品= Presenters.ProductsPresenter.GetProductBySku(c.productSKU)

あるので、LINQは、そのクエリ内dynaimcコンテンツを好きではないことを知っていますまた別のGetProductBySku方法はProductDetail

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

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"。私は少しアップあなたの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) 
         }); 

はこれを試してみてください。それでもSelectの最後に1つ必要です。

+0

Yikes。 'OrderedItems'がそうであるとすれば、このコードはどんな現実的なデータでも死んでしまいます。 –

+0

私は、 "Where"が適切に制限された後の.ToList()を想定しています。 – Robaticus

+0

ああ、良い点。 –

関連する問題