繁体   English   中英

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 join

 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
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM