我觉得以下可能是一种暴行,也许这就是为什么它不起作用。 我在这里,请求你的帮助。 : - )
另外请帮我编辑这个问题。我不知道什么是合适的标题或更好的方式来制定它。 (就像你现在可能已经猜到的那样,英语不是我的母语)。
考虑一个类:
public class Order
{
public int FareCode;
public int Quantity;
}
然后Linq查询如下:
var orders = new []{ new Order {...}, ...};
var fareCodes = orders.Select(o => o.FareCode).ToArray();
using(var dc = new datacontext())
{
var query = dc.Fares
.Where(f => fareCodes.Contains(f.FareCode))
.Select(f => new {
Fare = f,
Quantity = orders.Single(o => o.FareCode == f.FareCode).Quantity //<-- This is not right!
})
}
所以Quantity = Orders.Single(o => o.FareCode == f.FareCode).Quantity
是对的。那么实现这一目标的另一个选择是什么?
更新:它不起作用的原因是因为运行时抛出此异常:除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现
答案 0 :(得分:2)
根据您的上一条评论,请尝试以下解决方案:
var query = Fares
.Where(f => fareCodes.Contains(f.FareCode)).ToList()
.Select(f => new
{
Fare = f,
Quantity = Orders.Single(o => o.FareCode == f.FareCode).Quantity
});
答案 1 :(得分:1)
因此,对于每个Order
,您希望将FareCode
更改为关联的Fare
,并将每个Fare
的数量相加,而无需点击您的datacontext每一个Order
。
我会在Orders
列表中使用GroupBy / ToDictionary组合,并在ToDictionary()
列表中使用Fares
:
// generates a dictionary of fare codes and total quantity of orders per fare code
var fareQuantities = Orders.GroupBy(o => o.FareCode).ToDictionary(og => og.Key, og => og.Sum(o => o.Quantity));
using(var dc = new datacontext())
{
var query = dc.Fares
.Where(f => fareQuantities.Keys.Contains(f.FareCode))
.ToDictionary(f => f, f => fareQuantities[f.FareCode]);
// query is now a dictionary of fares and the total quantities of each fare ordered
}
希望有所帮助。