我有2个不同对象的列表:
public class A {
string Id;
string Name;
List<B> listofB;
}
public class B {
string Id;
string Test;
}
B
中的ID与A
现在我有2个列表
var listA = new List<A>();
var listB = new List<B>();
如何通过linq将Id匹配的每个B
对象添加到A
列表?
现在我做了:
foreach(var a in listA){
a.listofB = listB.FindAll(i => i.Id == a.Id);
}
但我认为有更好的方法可以做到这一点
(现在总是返回null,仍在试图找出原因)
答案 0 :(得分:4)
答案 1 :(得分:1)
void Main()
{
var alist = new List<A>();
var blist = new List<B>();
result = alist.GroupJoin(
blist,
a=>a.Id, //Pick group key from A
b=>b.Id, //Pick group key from B
(singleA,manyB)=>
new{TheA=singleA,AllTheBs=manyB.ToList()}); //Create a resulting object.
}
答案 2 :(得分:0)
您可以使用GroupBy子句:
var theBsById = listB.GroupBy(b => b.Id);
然后:
foreach(IGrouping<int, B> grouping in theBsById)
{
A theA = listA.Where(a => a.Id == grouping.Key).FirstOrDefault();
if (theA != null)
{
theA.listofB = grouping.ToList();
}
}
(这只会更新在listB中有Ids的As中的listofBs)
或:
foreach(var a in listA)
{
a.listofB = theBsById
.Where(grouping => grouping.Key == a.Id)
.SelectMany(grouping => grouping)
.ToList();
}
(这会更新所有As的listofB,这也是上面的代码所做的。)