C# - 在列表

时间:2015-10-20 14:57:32

标签: c# list select linq-to-sql

基本上是为了让您了解设计。我有一个与另一个表有一对多关系的项目列表。可以将项目分配给多个协议,但也可以分配给任何协议。如果没有,则需要"未分配"。第一部分很有效,给了我每个项目所需要的东西。在对其进行分组后,我无法获得分配给该组的协议的明确列表。请参阅下面的代码,了解我到目前为止所拥有的内容:

var groupedItems = ctx.Items
    .Where(dk=>itemExpression)
    .Select(dk => new
                  {
                      dk.ItemID,
                      dk.IntItemNumber,
                      ProtocolStr = dk.ItemProtocols.Any() 
                                    ? dk.ItemProtocols.Select(p => p.Protocol.ProtocolName)
                                                      .ToList() 
                                    : new List<string> { "Unassigned" },
                  })
    .GroupBy(d => d.ItemID)
    .Select(d => new CustomClass
                 {
                     ItemID = d.Key,
                     Min = d.Min(dd => dd.IntItemNumber),
                     Max = d.Max(dd => dd.IntItemNumber),
                     ProtocolsStr = String.Join(
                         ",",
                         d.SelectMany(dd=>dd.ProtocolStr.Distinct()).ToList()),
                     OrderQty = d.Count()
                 })
    .ToList()

运行时,我收到错误:Could not format node 'ClientQuery' for execution as SQL.

基本上,我想要这样的结果:

            ItemId  Min     Max     OrderQty    Protocols
            1       100005  299998  119797      Unassigned, Protocol1, Protocol2
            2       100003  300000  79799       Unassigned, Protocol2
            3       300029  399999  24795       Protocol1

我假设问题是选择中嵌套的选择。

0 个答案:

没有答案