Linq Select with inner method error - LINQ to Entities does not recognize the method Linq使用内部方法的选择错误 - LINQ to Entities不识别该方法
Linq Select with inner method error - LINQ to Entities does not recognize the method Linq使用内部方法的选择错误 - LINQ to Entities不识别该方法
我正在为我的项目使用View/Presenter结构。该项目是一个有OrderedItems和Products的电子商务网站。\n当调用GetOrdersItemsByOrderID(orderID)时,我遇到了一个LINQ错误。\nLINQ to Entities无法识别\'DAL.Views.ProductView GetProductBySku(System.String)\'方法,并且无法将此方法转换为存储表达式。\n我知道LINQ不喜欢在其查询中使用动态内容,所以问题出在SELECT语句中的Product = Presenters.ProductsPresenter.GetProductBySku(c.productSKU)。\n我不知道如何在构建GetOrdersItemsByOrderID TOLIST的同时,还要使用另一个GetProductBySku方法填充ProductDetail字段。\npublic static List
在使用LINQ查询时,可能会遇到"LINQ to Entities does not recognize the method"的错误。这个错误的原因是LINQ to Entities无法识别方法。 解决这个问题的方法是执行查询之前添加一个"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()"方法来执行查询,并将结果转换为列表。这样,我们就可以在调用"Select"方法时,使用我们自己的方法"Presenters.ProductsPresenter.GetProductBySku"。
然而,如果数据量很大,这段代码可能会出错。为了解决这个问题,我们可以使用".AsEnumerable()"方法代替".ToList()"方法。
下面是修改后的代码:
var result = ctx.OrderedItems.Where(o => o.orderID == orderID).AsEnumerable() .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();
这样做的好处是,我们可以延迟查询的执行,只有在需要时才会将结果转换为列表。这样可以避免不必要的列表生成,提高查询的效率。
,当遇到"Linq Select with inner method error - LINQ to Entities does not recognize the method"错误时,可以通过使用".ToList()"方法或".AsEnumerable()"方法来解决。使用".ToList()"方法会立即执行查询并将结果转换为列表,而使用".AsEnumerable()"方法可以延迟查询的执行,提高查询的效率。