将列表合并为一个

Zig*_*ler 0 c# linq merge lambda list

我看到下面的帖子对我来说真的很难理解.所以我重新发布它.对不起,如果有人认为它是重复的.我只有简单的要求

C#加入/ Linq和Lambda的位置

我有这样的课

public class Person
{
  public int Id{get;set;}
  public string Name{get;set;}
  public string MailingAddress{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个像下面这样的方法

public IList<Person> GetNames(IList<int> ids)
Run Code Online (Sandbox Code Playgroud)

这将给我下面的人员名单

1"Sam"""

2"开发"""

4"哈希"

我有另一种方法如下

 public IList<Person> GetMailingAddress(IList<int> ids)
Run Code Online (Sandbox Code Playgroud)

这将给我下面的人员名单

1"""ABC"

6"""TTT"

2"""XYZ"

现在我需要合并两个方法的结果,以便我可以得到这样的最终结果

1"Sam""ABC"

2"Dev""XYZ"

更新:对不起,我没有明确提供我的测试数据.请参阅上面的测试数据

Jus*_*ner 5

我对你的方法返回的内容感到有些困惑,如果你需要将两个结果组合起来得到完整的Person对象,那么有两种方法可以使你的方法正常工作.

  1. 如果您可以依赖于以相同顺序返回的相同数量的对象,则可以尝试:

    names.Zip(mailingAddresses, (n, m) => new Person
    {
        Id = n.Id,
        Name = n.Name,
        MailingAddress = m.MailingAddress
    });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果你不能依赖这两个条件,你可以使用Join:

    names.Join(mailingAddresses, n => n.Id, m => m.Id, (n, m) => new Person
    {
        Id = n.Id,
        Name = n.Name,
        MailingAddress = m.MailingAddress
    });
    
    Run Code Online (Sandbox Code Playgroud)

即使您有这两个选项,如果您可以控制实际从数据源获取对象的代码,那么还有第三个更好的选择.如果你知道你需要这两个数据块,你应该创建一个查询数据源的单一时间让所有的数据,而不是每件数据的查询,一旦一个方法.