【问题标题】:Linq ToArray in ToArray errorToArray 中的 Linq ToArray 错误
【发布时间】:2014-03-06 14:35:19
【问题描述】:

我正在尝试使用 Linq 制作我的模型(篮子)的数组,并且在该模型中我有另一个数组,所以当我使用链接创建该模型时出现此错误:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
LINQ to Entities does not recognize the method 'HTTP.Webshop.API.WebAPI.Models.BasketLine[] ToArray[BasketLine](System.Collections.Generic.IEnumerable`1[HTTP.Webshop.API.WebAPI.Models.BasketLine])' method, and this method cannot be translated into a store expression.
</ExceptionMessage>
<ExceptionType>System.NotSupportedException</ExceptionType>
<StackTrace>
at System.Web.Http.ApiController.<InvokeActionWithExceptionFilters>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()
</StackTrace>
</Error>

当我只返回一个 Basket 模型(只有 BasketLines 数组)时,我没有收到错误。

我的代码是:

return basketManager.GetList(context).Select(b => new Models.Basket
                {
                    BasketId = b.BasketId,
                    CustomerId = b.CustomerId,
                    UserId = b.UserId,
                    ASPNETSessionId = b.ASPNETSessionId,
                    Created = b.Created,
                    CreatedOrder = b.CreatedOrder,
                    ShipmentMethodId = b.ShipmentMethodId,
                    ShipmentMethodName = (b.ShipmentMethod != null) ? b.ShipmentMethod.Description : null,
                    ShippingDocument = b.ShippingDocument,
                    VoucherCode = b.VoucherCode,
                    LockedSince = b.LockedSince,
                    PickupLocationId = b.PickupLocationId,
                    Reference = b.Reference,
                    Comments = b.Comments,
                    PurchaseNumber = b.PurchaseNumber,
                    DesiredDeliveryDate = b.DesiredDeliveryDate,
                    CompanyNameDelivery = b.CompanyNameDelivery,
                    NameDelivery = b.NameDelivery,
                    AddressDelivery = b.AddressDelivery,
                    Address2Delivery = b.Address2Delivery,
                    PostalCodeDeliver = b.PostalCodeDelivery,
                    CityDelivery = b.CityDelivery,
                    CountryISOCodeDelivery = b.CountryISOCodeDelivery,
                    InvoiceDiscount = b.InvoiceDiscount,
                    Modified = b.Modified,
                    BasketLines = b.BasketLines.Select(bl => new Models.BasketLine
                    {
                        BasketLineId = bl.BasketLineId,
                        BasketId = bl.BasketId,
                        ProductId = bl.ProductId,
                        ProductName = bl.Product.Name,
                        ProductVariantId = bl.ProductVariantId,
                        ProductVariantName = bl.ProductVariant.Name,
                        Quantity = bl.Quantity,
                        QuantityByPiece = bl.QuantityByPiece,
                        VATPercentage = bl.VATPercentage,
                        Amount = bl.Amount,
                        CalculatorAmount = bl.CalculatorAmount,
                        Discount = bl.Discount,
                        Reference = bl.Reference,
                        Comments = bl.Comments,
                        LockedSince = bl.LockedSince,
                        StockNr = bl.StockNr,
                        Created = bl.Created,
                        Modified = bl.Modified
                    }).ToArray()
                }).ToArray();

【问题讨论】:

  • GetList 是否返回 IQueryable
  • 嘿安德烈,是的,GetList 返回一个 IQueriable。 BasketLines 返回一个 ICollection。

标签: c# linq asp.net-web-api


【解决方案1】:

由于GetList 返回IQueryable,实际的SQL 查询直到最后一个ToArray 被调用后才会执行。所以这里发生的是 LINQ to SQL 尝试将整个查询转换为 SQL。当然SQL中没有ToArray类比,翻译失败。

您可以做的是在开始投影到模型之前运行查询

basketManager.GetList(context).ToList().Select(...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2017-11-07
    • 2010-09-15
    相关资源
    最近更新 更多