iam*_*yer 4 .net c# linq linq-to-entities .net-4.0
数据库包含订单.订单可以包含在一组订单中.对于每组订单,它可以包含1到多个订单.
但是,Orders可以为NULLO值分配GroupOrderId,因为之前的Orders没有分组概念.只有新订单强制执行添加到组的概念.
要为每个订单执行操作而要填充的类结构是
public class OrdersGroup
{
public int? GroupOrderId { get; set; }
public List<int> OrderIds { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
linq声明
var workPacketOrdersList = (from o in db.Orders
where
o.GroupOrderId >= groupOrderIdMin && o.GroupOrderId <= groupOrderIdMax &&
o.IsDeleted == false
orderby o.WorkPacketId ascending
group o by o.WorkPacketId
into grp
select new OrdersGroup
{
GroupOrderId = grp.Key,
OrderIds = grp.Select(g => g.OrderId).ToList()
}).ToList();
Run Code Online (Sandbox Code Playgroud)
完全例外
LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[System.Int32] ToList[Int32](System.Collections.Generic.IEnumerable`1[System.Int32])' method, and this method cannot be translated into a store expression.
Run Code Online (Sandbox Code Playgroud)
我看到linq查询的返回类型是a List<OrdersGroup>.
如果从查询中省略了最终的.ToList(),则返回类型变为 IQueryable<OrdersGroup>
无论接下来执行什么操作,结果都是此方法无法转换为商店表达式的异常.
我试图删除特定select new OrdersGroup的更通用的select new,然后对此结果执行操作只发现相同的商店表达式异常.
有人可以透露一下这个linq不正确的地方吗?
问题是LINQ to Entities正在尝试将您的查询转换为SQL.它不知道如何转换ToList成SQL,所以这就是问题所在.您需要ToList从查询中删除对该调用的调用.
那是,
OrderIds = grp.Select(g => g.OrderId).ToList()
Run Code Online (Sandbox Code Playgroud)
LINQ to Entities无法将其转换为SQL.删除电话
OrderIds = grp.Select(g => g.OrderId)
Run Code Online (Sandbox Code Playgroud)
如果您需要OrderIds成为a List<int>,请在ToList执行查询后进行调用.
| 归档时间: |
|
| 查看次数: |
16120 次 |
| 最近记录: |