Linq加入两个相似的对象列表?
Linq to join two similar object list?
objA = new obj()
{
ID = 123,
attriA = "",
attriB = "someValueB"
}
objB = new obj()
{
ID = 123,
attriA = "someValueA",
attriB = ""
}
List<obj> ListA = new List<obj>();
ListA.add(objA);
List<obj> ListB = new List<obj>();
ListB.add(objB);
鉴于上述情况,我需要 listC
具有以下对象:
objC = new obj()
{
ID = 123,
attriA = "someValueA",
attriB = "someBalueB"
}
这是我试过的。它有效,但我认为必须有一些方法可以通过使用我不知道的 linQ 来缩短代码:
foreach(obj item in ListA)
{
obj objB = ListB.Where(x=> x.ID == item.ID).FirstOrDefault();
obj objC = new obj(){
ID = objB.ID;
attriA = item.attriA;
attriB = objB.attriB;
};
ListC.add(objC);
}
您可以使用 linq 连接,如下所示
var query = from a in ListA
join b in ListB
on a.ID equals b.ID
select new Obj()
{
ID = b.ID;
attriA = a.attriA;
attriB = b.attriB;
};
以上代码未经测试
如果总是有字符串,你可以这样处理:
var listC = ListA.Join(ListB,
A => A.ID, B => B.ID,
(A, B) => new {
ID = A.ID,
attriA = !string.IsNullOrEmpty(A.attriA) ? A.attriA : B.attriA,
attriB = !string.IsNullOrEmpty(B.attriB) ? B.attriB : A.attriB
});
objA = new obj()
{
ID = 123,
attriA = "",
attriB = "someValueB"
}
objB = new obj()
{
ID = 123,
attriA = "someValueA",
attriB = ""
}
List<obj> ListA = new List<obj>();
ListA.add(objA);
List<obj> ListB = new List<obj>();
ListB.add(objB);
鉴于上述情况,我需要 listC
具有以下对象:
objC = new obj()
{
ID = 123,
attriA = "someValueA",
attriB = "someBalueB"
}
这是我试过的。它有效,但我认为必须有一些方法可以通过使用我不知道的 linQ 来缩短代码:
foreach(obj item in ListA)
{
obj objB = ListB.Where(x=> x.ID == item.ID).FirstOrDefault();
obj objC = new obj(){
ID = objB.ID;
attriA = item.attriA;
attriB = objB.attriB;
};
ListC.add(objC);
}
您可以使用 linq 连接,如下所示
var query = from a in ListA
join b in ListB
on a.ID equals b.ID
select new Obj()
{
ID = b.ID;
attriA = a.attriA;
attriB = b.attriB;
};
以上代码未经测试
如果总是有字符串,你可以这样处理:
var listC = ListA.Join(ListB,
A => A.ID, B => B.ID,
(A, B) => new {
ID = A.ID,
attriA = !string.IsNullOrEmpty(A.attriA) ? A.attriA : B.attriA,
attriB = !string.IsNullOrEmpty(B.attriB) ? B.attriB : A.attriB
});