【问题标题】:Linq GroupBy into new objectLinq GroupBy 进入新对象
【发布时间】:2018-12-05 10:01:07
【问题描述】:

首先我是 Linq 的新手。

我有一个名为Lba对象列表,这些对象具有不同的分组属性。我的对象属性是:

int aId,
int bId,
int max,
int min,
CustomObject1? Co1,
CustomObject2? Co2, 
CustomObject3? Co3

我想将我的对象分组到具有以下属性的新对象 LbaGroup 中

int aId,
int bId,
int max,
int min,
IList<CustomObject1> Co1,
IList<CustomObject2> Co2, 
IList<CustomObject3> Co3

我使用以下查询对我的对象进行了分组,但它返回了一个列表>

var query = myLbaList
  .GroupBy(a => new {a.aId, a.bId, a.max, a.min})
  .Select(a => a.ToList())
  .ToList();

我可以使用 2 个 foreach 循环构建我的新对象,但我想知道是否有 直接方法 可以通过 Linq 实现这一目标。

谢谢。

编辑:我的循环看起来像:

foreach(List<Lba> LbaList in query){
  LbaGroup myNewObject = new LbaGroup{
    Co1 = new List<CustomObject1>(),
    Co2 = new List<CustomObject2>(),
    Co3 = new List<CustomObject3>(),
  }

  foreach(Lba oldObject in LbaList){
    myNewObject.aId = oldObject.aId;
    myNewObject.bId = oldObject.bId;
    myNewObject.max = oldObject.min;

    if oldObject.Co1 != null
      myNewObject.Co1.Add(oldObject.Co1);
    if oldObject.Co2 != null
      myNewObject.Co2.Add(oldObject.Co2);
    if oldObject.Co3 != null
      myNewObject.Co3.Add(oldObject.Co3);
  }
}

【问题讨论】:

  • 嗨,你也可以显示循环吗?

标签: c# linq object


【解决方案1】:

类似这样的:

var result = myLbaList
  .GroupBy(
     a => new {a.aId, a.bId, a.max, a.min}, // Key
     a => new {a.Col1, a.Col2, a.Col3})     // Values
  .Select(chunk => new {
     // From Key
     aId = chunk.Key.aId,
     bId = chunk.Key.bId, 
     max = chunk.Key.max, 
     min = chunk.Key.min,

     // From Values
     Col1 = chunk
       .Where(item => item.Col1.HasValue) // not null items
       .Select(item => item.Col1.Value)   // CustomObject1? to CustomObject1
       .ToList(),  
     Col2 = chunk
       .Where(item => item.Col2.HasValue) 
       .Select(item => item.Col2.Value)
       .ToList(), 
     Col3 = chunk
       .Where(item => item.Col3.HasValue) 
       .Select(item => item.Col3.Value)
       .ToList(),
   })
  .ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多