【问题标题】:compare list and sublist linq比较列表和子列表 linq
【发布时间】:2019-12-09 13:51:55
【问题描述】:

我想比较两个列表,比如

public class List1
{
    public string StudentCode { get; set; }
    public string Department { get; set; }
    // etc...
}

public class List2
{
    public string id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Email { get; set; }
    public List<ListInfo> ListInfo { get; set; }
}

public class ListInfo
{
    public string StudentCode { get; set; }
    public string Mark1 { get; set; }
    public string Mark2 { get; set; }
}

需要检查list1.student code是否等于List2.ListInfo.student code并返回List1数据 如何使用 LINQ 执行此操作请帮助我。

【问题讨论】:

  • 你有这些类的列表吗?
  • 是 List1 和 List2 就像 IList
  • 所以您希望过滤您的IList&lt;List1&gt;,只留下在IList&lt;List2&gt; 中找到StudentCode 的对象?

标签: c# linq


【解决方案1】:
Var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));

在这里,您正在检查 List2 的 ListInfo 列表中的任何内容是否有一个位于 List1 中的 StudentCode。

【讨论】:

  • @SureshSankar 没问题。如果对您有好处,请接受答案。谢谢
【解决方案2】:

我想到的最简单的解决方案是:

 List<List1> result = new List<List1>();
 foreach (var listItem in list2)
    {
      var list1Obj = list1.Where(n => listItem.ListInfo.Any(x => x.StudentCode == n.StudentCode)).FirstOrDefault();
      if(list1Obj != null)
         result.Add(list1Obj);
    }

【讨论】:

  • var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));
  • 酷,你有一个单行:)
【解决方案3】:

这是使用 LINQ 从 List1List2 获取匹配记录的示例

var list1 = new List<List1>();
list1.Add(new List1() { StudentCode = "s1", Department = "d1" });
list1.Add(new List1() { StudentCode = "s2", Department = "d2" });
list1.Add(new List1() { StudentCode = "s3", Department = "d3" });

var listInfo = new List<ListInfo>();
listInfo.Add(new ListInfo() { StudentCode = "s1" });
listInfo.Add(new ListInfo() { StudentCode = "s3" });

var list2 = new List<List2>();
list2.Add(new List2() { id = "1", ListInfo = listInfo });     

var filteredlist = list1.Where(x => list2.Any(l2=>l2.ListInfo.Any(y => y.StudentCode == x.StudentCode)));

【讨论】:

  • var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));
  • @SureshSankar,好的。在您的情况下,list2 是“List”。相应地更新了代码
【解决方案4】:

假设您有一个 List1 和 List2 的实例。

var l1 = new List<List1>();
var l2 = new List<List2>();
var listInfos = new List<ListInfo>();

l2.ForEach(i => listInfos.AddRange(i.ListInfo));
var x =  l1.Select(i => listInfos.Any(info=>info.StudentCode == i.StudentCode));

【讨论】:

  • 我认为他需要返回 List1
  • @ZavenZareyan 不,x 现在是 IEnumerable&lt;bool&gt;
【解决方案5】:

请试试下面的代码:

var result = list1.Where(p => list2.SelectMany(p1 => p1.ListInfo).Where(p2 => p2.StudentCode == p.StudentCode)).ToList();

【讨论】:

  • 您能告诉我您遇到的更详细的错误吗?
  • var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));
  • 这能回答你的问题吗?如果您需要任何帮助,请告诉我@Suresh Sankar
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多