0

我有一种感觉,以下可能是暴行,也许这就是它不起作用的原因。所以我在这里,寻求你的帮助。:-)

另外请帮我编辑这个问题。我不知道什么是合适的标题或更好的表述方式。(就像你现在可能已经猜到的那样,英语不是我的母语)。

考虑一个像这样的类:

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不对。那么实现这一目标的另一种选择是什么?

更新:它不起作用的原因是因为运行时抛出了这个异常:本地序列不能在查询运算符的 LINQ to SQL 实现中使用,除了 Contains() 运算符

4

2 回答 2

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
                         });
于 2012-04-30T19:03:29.577 回答
1

因此,对于每个Order,您都希望将其更改FareCode为关联的Fare,并对每个的数量求和,而不会影响Fare每个单个的数据上下文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
}

希望有帮助。

于 2012-04-30T19:48:51.440 回答