比较列表和子列表linq

时间:2019-12-09 13:51:55

标签: c# linq

我想比较两个列表,例如

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代码是否等于List2.ListInfo.student代码并返回List1数据     如何使用LINQ做到这一点对我有帮助。

6 个答案:

答案 0 :(得分:2)

Var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));

在这里,您正在检查List2的ListInfo列表中是否有任何包含List1中的StudentCode。

答案 1 :(得分:0)

这里是使用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)));

答案 2 :(得分:0)

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

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

答案 3 :(得分:-1)

假设您有一个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));

答案 4 :(得分:-1)

请尝试以下代码:

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

答案 5 :(得分:-2)

var a = new List<int>() { 1,3,5,7};
var b = new List<int>() { 1, 3, 4,7 };
var y = a.Where(x => x == b.Where(t=>t==x).FirstOrDefault());
//return 1,3,7