参数的类型不能推断使用Linq GroupJoin

时间:2013-10-24 14:02:12

标签: c# linq

我正在尝试制作一个linq GroupJoin,我收到了前面提到的错误。这是代码

public Dictionary<string, List<QuoteOrderline>> GetOrderlines(List<string> quoteNrs)
{
    var quoteHeadersIds = portalDb.nquote_orderheaders
        .Where(f => quoteNrs.Contains(f.QuoteOrderNumber))
        .Select(f => f.ID).ToList();

    List<nquote_orderlines> orderlines = portalDb.nquote_orderlines
        .Where(f => quoteHeadersIds.Contains(f.QuoteHeaderID))
        .ToList();

    var toRet = quoteNrs
        .GroupJoin(orderlines, q => q, o => o.QuoteHeaderID, (q => o) => new 
        {
            quoteId = q,
            orderlines = o.Select(g => new  QuoteOrderline()
            {
                Description = g.Description,
                ExtPrice = g.UnitPrice * g.Qty,
                IsInOrder = g.IsInOrder,
                PartNumber = g.PartNo,
                Price = g.UnitPrice,
                ProgramId = g.ProgramId,
                Quantity = (int)g.Qty,
                SKU = g.SKU
            }).ToList()
         });           
 }

1 个答案:

答案 0 :(得分:0)

我怀疑这是当前的问题:

(q => o) => new { ... }

我怀疑你的意思是:

(q, o) => new { ... }

换句话说,“这是一个接受查询和订单的函数,并返回一个匿名类型”。第一种语法根本没有意义 - 即使考虑更高阶的函数,通常还是q => o => ...而不是(q => o) => ...

现在这本身就不够了......因为GroupJoin没有返回字典。 (实际上,你甚至还没有return声明。)之后你需要ToDictionary个电话。或者,通过ILookup<string, QuoteOrderLine>返回ToLookup可能更合适。