我是新手学习LINQ。 我在编码方面遇到了一些问题。我用Convert.Int32将列从字符串转换为整数。我的返回功能使用List。所以在我的代码中,我确实将查询数据移动到List,但是当我运行此代码时出现错误。并且错误始终在“foreach”上,并显示错误消息:
LINQ to Entities无法识别方法'Int32 ToInt32(System.String)'方法,并且此方法无法转换为商店表达式。
这是我的代码:
var query = from o in _invoiceRepository.Table
join opv in _opvRepository.Table on o.Id equals opv.InvoiceId
join pv in _pvRepository.Table on opv.ProductVariantId equals pv.Id
join p in _pRepository.Table on pv.ProductId equals p.Id
where !o.Deleted && EndDate >= o.CreatedOnUtc && StartDate <= o.CreatedOnUtc
&& opv.SubstitutedBy != null && o.PaidDateUtc != null
orderby o.GHOrderId, pv.Sku
select new
{
OrderId = o.GHOrderId,
SKU = pv.Sku,
Brand = p.BrandII,
Description = pv.Description,
Size = p.Size,
OrderQty = Convert.ToInt32(opv.OrderQuantity)
};
var query2 = from row in query
group row by new
{ row.OrderId, row.SKU, row.Brand, row.Description, row.Size } into result
select new
{
OrderId = result.Key.OrderId,
SKU = result.Key.SKU,
Brand = result.Key.Brand,
Description = result.Key.Description,
Size = result.Key.Size,
OrderQty = result.Sum(row => row.OrderQty).ToString("n2")
};
List<string> _tempdata = new List<string>();
foreach (var order in query.ToList())
{
_tempdata.Add(order.OrderId.ToString() + ';' + order.SKU.ToString() + ';' + order.Brand.ToString() + ';' + order.Description.ToString() + ';' + order.Size.ToString() + ';' + order.OrderQty.ToString());
}
我不知道如何解决这个问题...... 我需要你的帮助......
谢谢。
答案 0 :(得分:0)
正如异常所述,你可以在linq中向实体调用此方法(也不是大多数其他方法)。这是因为您键入的代码必须转换为sql,除了一些手动移植的方法之外,没有办法将.net方法转换为sql
然而,你可以做的是在linq to entity查询中执行你需要的所有内容,除此之外然后调用.AsEnumerable()。通过该语句的任何内容都将在.net端运行,而不是在sql server上运行