在C#中使用Linq加入两个不同的对象数据类型

时间:2018-03-06 09:11:54

标签: c# linq

我有两个名单:

source <- function(f, encoding = 'UTF-8') {
    l <- readLines(f, encoding=encoding)
    eval(parse(text=l),envir=.GlobalEnv)
}

我想使用LINQ加入这两个列表,并希望返回ListA,其值更新如下:

ListA:
[
   { 
      Id = 1,
      Name = "A",
      Summary = ""
   },
   { 
      Id = 2,
      Name = "B",
      Summary = ""
   }
]

ListB: 
[
  {
    Id = 1,
    Value = "SomeThing"
  },
  {
    Id = 2,
    Value = "EveryThing"
  }
]

我根据ID加入ListA和ListB,并将[ { Id = 1, Name = "A", Summary = "SomeThing" }, { Id = 2, Name = "B", Summary = "EveryThing" } ] 分配给value
我尝试了下面的方法:

summary

** =&gt;所以这里我要将数据从obj2分配给obj1然后想要返回obj1 **

可能或我们如何做到这一点?

3 个答案:

答案 0 :(得分:1)

您还可以使用简单的循环

更新现有的ListA
foreach (var itemA in ListA)
{
    itemA.Summary = ListB.FirstOrDefault(x => x.Id == itemA.Id)?.Value;
}

加入方法

var query = ListA.Join(ListB,
                    ia => ia.Id,     
                    ib => ib.Id, 
                    (ia, ib) => new aItem() //type of ListA here
                    {
                        Id = ia.Id,
                        Name = ia.Name,
                        Summary = ib.Value
                    });

答案 1 :(得分:0)

您可以尝试加入这两个列表:

var listA = new List<ClassA>();
var listB = new List<ClassB>();

var list = listA.Join(listB, a => a.Id, b => b.Id, (a, b) => 
            new ClassA
            {
                Id = a.Id,
                Name = a.Name,
                Summary = b.Value
            });

答案 2 :(得分:0)

使用方法语法Enumerable.Join在这里使用起来更容易:

var result = listA.Join(listB,    // Join ListA and ListB
    a => a.Id,                    // from every a in ListA take a.Id
    b => b.Id,                    // from every b in ListB take b.Id
    (a, b) => new                 // when they match, take the a and the b
    {                             // to create a new object with properties
        Id = a.Id,
        Name = a.Name,
        Summary = b.Value,
    });

请注意,结果是匿名类型,如果您希望结果与ListA中的项目具有相同的类型(假设它们属于A类),请更改连接的最后部分: / p>

 (a, b) => new A()           // when they match, take the a and the b
 {                           // to create a new object of class A
    Id = a.Id,
    Name = a.Name,
    Summary = b.Value,
 });