我想比较两个列表,例如
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做到这一点对我有帮助。
答案 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从List1
和List2
获取匹配记录的示例
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