Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较列表和子列表linq_C#_Linq - Fatal编程技术网

C# 比较列表和子列表linq

C# 比较列表和子列表linq,c#,linq,C#,Linq,我想比较两个列表,如 公共类列表1 { 公共字符串StudentCode{get;set;} 公共字符串部门{get;set;} //等等。。。 } 公共类列表2 { 公共字符串id{get;set;} 公共字符串名称{get;set;} 公共字符串地址{get;set;} 公共字符串电子邮件{get;set;} 公共列表ListInfo{get;set;} } 公共类列表信息 { 公共字符串StudentCode{get;set;} 公共字符串Mark1{get;set;} 公共字符串Mark

我想比较两个列表,如

公共类列表1
{
公共字符串StudentCode{get;set;}
公共字符串部门{get;set;}
//等等。。。
}
公共类列表2
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共字符串电子邮件{get;set;}
公共列表ListInfo{get;set;}
}
公共类列表信息
{
公共字符串StudentCode{get;set;}
公共字符串Mark1{get;set;}
公共字符串Mark2{get;set;}
}
需要检查list1.student code是否等于List2.ListInfo.student code并返回list1数据
如何使用LINQ执行此操作请帮助我。

假设您有一个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));
var l1=新列表();
var l2=新列表();
var listInfos=新列表();
l2.ForEach(i=>listInfos.AddRange(i.ListInfo));
var x=l1.Select(i=>listInfos.Any(info=>info.StudentCode==i.StudentCode));

请尝试以下代码:

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

下面是使用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)));
var list1=新列表();
添加(新列表1(){StudentCode=“s1”,Department=“d1”});
添加(新列表1(){StudentCode=“s2”,Department=“d2”});
添加(新的list1(){StudentCode=“s3”,Department=“d3”});
var listInfo=新列表();
Add(new listInfo(){StudentCode=“s1”});
Add(newlistinfo(){StudentCode=“s3”});
var list2=新列表();
添加(新的list2(){id=“1”,ListInfo=ListInfo});
var filteredlist=list1.Where(x=>list2.Any(l2=>l2.ListInfo.Any(y=>y.StudentCode==x.StudentCode));

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

 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);
    }
列表结果=新列表();
foreach(列表2中的变量listItem)
{
var list1Obj=list1.Where(n=>listItem.ListInfo.Any(x=>x.StudentCode==n.StudentCode)).FirstOrDefault();
if(list1Obj!=null)
结果.添加(列表1obj);
}

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

是否有此类类的列表?是的,List1和List2类似于IListSo,因此您希望筛选您的
IList
,只留下在
IList
中找到
StudentCode
的对象?我想他需要将列表1returned@ZavenZareyan不,
x
现在将是
IEnumerable
。您能告诉我您得到的更详细的错误吗?var newList=list1.Where(l1=>list2.Any)(l2=>l2.ListInfo.Any(li=>li.StudentCode==l1.StudentCode));这能回答你的问题吗?如果你需要任何帮助,请告诉我@Suresh Sankarvar newList=list1.Where(l1=>list2.any(l2=>l2.ListInfo.any(li=>li.StudentCode==l1.StudentCode));酷,你有一行代码:)var newList=list1.Where(l1=>list2.any(l2=>l2=>ListInfo.any)(li=>li.StudentCode==l1.StudentCode));@SureshSankar,好的。在你的例子中,list2是'List'。你已经更新了代码accordigly@SureshSankar没问题。如果对你有好处,就接受答案。谢谢
Var newList = list1.Where(l1 => list2.Any(l2 => l2.ListInfo.Any(li => li.StudentCode == l1.StudentCode)));