【发布时间】:2010-06-28 22:57:19
【问题描述】:
我有一段代码将内存列表与数据库中保存的一些数据结合起来。这在我的单元测试中工作得很好(使用使用 List 的模拟 Linq2SqlRepository)。
public IRepository<OrderItem> orderItems { get; set; }
private List<OrderHeld> _releasedOrders = null;
private List<OrderHeld> releasedOrders
{
get
{
if (_releasedOrders == null)
{
_releasedOrders = new List<nOrderHeld>();
}
return _releasedOrders;
}
}
.....
public int GetReleasedCount(OrderItem orderItem)
{
int? total =
(
from item in orderItems.All
join releasedOrder in releasedOrders
on item.OrderID equals releasedOrder.OrderID
where item.ProductID == orderItem.ProductID
select new
{
item.Quantity,
}
).Sum(x => (int?)x.Quantity);
return total.HasValue ? total.Value : 0;
}
当我对数据库运行它时,我遇到了一个我不太明白的错误。
异常信息:
异常类型:System.NotSupportedException
异常消息:不能在 LINQ to SQL 中使用本地序列 查询运算符的实现 除了 Contains() 运算符。
我做错了什么?
我猜这与 orderItems 在数据库中而 releasedItems 在内存中这一事实有关。
编辑
我已经根据给出的答案更改了我的代码(谢谢)
public int GetReleasedCount(OrderItem orderItem)
{
var releasedOrderIDs = releasedOrders.Select(x => x.OrderID);
int? total =
(
from item in orderItems.All
where releasedOrderIDs.Contains(item.OrderID)
&& item.ProductID == orderItem.ProductID
select new
{
item.Quantity,
}
).Sum(x => (int?)x.Quantity);
return total.HasValue ? total.Value : 0;
}
【问题讨论】:
标签: linq linq-to-sql