首先,我是 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 实现的直接方法。 / p>
谢谢。
编辑:我的循环如下:
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);
}
}
答案 0 :(得分:6)
类似这样的东西:
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();