【问题标题】:Joining two lists with nested lists使用嵌套列表连接两个列表
【发布时间】:2019-11-28 19:22:21
【问题描述】:

试图找到一种通过 LINQ 或 PLINQ 将两个列表以及嵌套列表连接起来的方法。

我有 List AList B 并想加入这两个及其父子属性。

我已经尝试了以下

List<data> result = A.Where(o=>foo.Any(x=>x.headerid=o.headerid)) &&
o.details.Any(y=>foo.Any(z=>z.headerid=o.headerid && z.detailid=y.detailid)).ToList();

但不确定这是正确的做法。这里 foo 列表被扫描两次。我想要一个连接查询来解决这个问题,无论是 lambda 还是连接查询。最好加入查询。

class filterclass
{
   public string headerid;
   public string detailid;
}

class data 
{
  public string headerid;
  public string headername;
  public List<Detail> details;
  //...
}

class detail
{
  public string detailid;
  public string detailname;
  //...
}

List<data> A = new List<data>();
List<filterclass> foo = new List<filterclass>();

现在我需要将 A 和 foo 与以下字段连接起来 A.headerid = foo.headeridA.detail.detailid = foo.detailid

A.detail 是嵌套列表,我不知道如何加入它。不确定FirstOrDefaultAll 在这种情况下是否有效。也不想循环

任何帮助表示赞赏并提前致谢。

我需要一个 LINQ JOIN 查询。

【问题讨论】:

  • 请把它变成minimal reproducible example。此外,使用一致的名称。您当前使用的名称非常混乱。什么是ABfoo?此外,了解数据的来源也很重要。如果它们来自 SQL 后端并由例如实体框架查询,则可能会有很大的不同。你可以edit你的问题。
  • 您好格特,感谢您的回复。它不是来自 SQL 的东西。它是一个 .net 对象。 A 也是我上面提到的一个列表,就像 foo 一样。我只需要按照我的上述要求加入这两个列表。

标签: c# linq plinq


【解决方案1】:

您可以使用 Concat 扩展方法来加入列表:

var combinedList = list1.Concat(list2);

对于你的具体例子:

var combinedList = A.Concat(foo);

它创建一个IEnumerable&lt;T&gt; 的实例,它将按顺序枚举list1list2 的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多