C# 使用LINQ LAMBDA基于公共id连接两个类
我想使用lambda/linq,基于一个公共id连接到两个类,该id从父表生成一行,从子表生成两行。我已经在下面粘贴了,到目前为止我已经尝试过了,但是我得到的是每行10行,这是不正确的。欢迎对守则提出任何建议或修订 阶级C# 使用LINQ LAMBDA基于公共id连接两个类,c#,linq,list,lambda,C#,Linq,List,Lambda,我想使用lambda/linq,基于一个公共id连接到两个类,该id从父表生成一行,从子表生成两行。我已经在下面粘贴了,到目前为止我已经尝试过了,但是我得到的是每行10行,这是不正确的。欢迎对守则提出任何建议或修订 阶级 您可以将第一个方法的定义更改为以下内容 getAllDummySearchResults = () => (from dummySupplierId in Enumerable.Range(1, 10)
您可以将第一个方法的定义更改为以下内容
getAllDummySearchResults = () => (from dummySupplierId in Enumerable.Range(1, 10)
select new IntegrationSearchResult
{
Dfe = "School-1-" + dummySupplierId.ToString("000000"),
SchoolSearchResult = new SchoolResult
{
SupplierId = dummySupplierId,
SchoolName = "SchoolName" + dummySupplierId.ToString("000000"),
CreateDate = new DateTime(),
Pupils = 123
}
,
PupilSearchResult = new List<PupilResult>
{
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-1-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-1-" + dummySupplierId.ToString("000000")
},
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-2-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-2-" + dummySupplierId.ToString("000000")
}
}
}).Take(1).ToList();
getAllDummySearchResults=()=>(来自可枚举范围(1,10)中的dummySupplierId)
选择new IntegrationSearchResult
{
Dfe=“School-1-”+dummySupplierId.ToString(“000000”),
SchoolSearchResult=新的SchoolResult
{
SupplierId=dummySupplierId,
SchoolName=“SchoolName”+dummySupplierId.ToString(“000000”),
CreateDate=新的日期时间(),
学生人数=123
}
,
PupilSearchResult=新列表
{
新结果
{
SupplierId=dummySupplierId,
FirstName=“FirstName-pullow-1-”+dummySupplierId.ToString(“000000”),
LastName=“LastName-pullow-1-”+dummySupplierId.ToString(“000000”)
},
新结果
{
SupplierId=dummySupplierId,
FirstName=“FirstName-pullow-2-”+dummySupplierId.ToString(“000000”),
LastName=“LastName-pullow-2-”+dummySupplierId.ToString(“000000”)
}
}
}).Take(1.ToList();
它将只从子集合中拾取两条记录,当您在equality上调用第二个方法时,它将调用从子类中获取两行的第一个方法。在从IThanks中选择两行作为响应之前,您可以对内部集合进行排序,但我不想将结果限制为2。我只希望它返回父表(SchoolResult)中的10行和子表(PupilResult)中的匹配行。有了这个,我仍然从父表中得到2行,从子表中得到2行,供应商id为1,2,这是错误的。它应该返回两行相同的供应商id。ThanksI已将
Take(2)
更改为Take(1)
。这会让你得到你想要的,但我不知道你到底想通过这样的查询实现什么。如果你能把你的用例放进去,人们可能会更好地回答你的问题好吧,忘了我写的东西,想想我在顶部的两个类,我想要的只是我在文章中间提到的预期结果。这就是我想要实现的。谢谢我想我编辑的答案会给你你想要的结果
private Func<IEnumerable<IntegrationSearchResult>> _getAllDummySearchResults;
private Func<string, IntegrationSearchResult> _getDfeDummySearchSchool;
getAllDummySearchResults = () => (from dummySupplierId in Enumerable.Range(1, 10)
select new IntegrationSearchResult
{
Dfe = "School-1-" + dummySupplierId.ToString("000000"),
SchoolSearchResult = new SchoolResult
{
SupplierId = dummySupplierId,
SchoolName = "SchoolName" + dummySupplierId.ToString("000000"),
CreateDate = new DateTime(),
Pupils = 123
}
,
PupilSearchResult = new List<PupilResult>
{
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-1-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-1-" + dummySupplierId.ToString("000000")
},
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-2-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-2-" + dummySupplierId.ToString("000000")
}
}
}).ToList();
_getDfeDummySearchSchool = dfe =>
{
var allSchools = _getAllDummySearchResults();
return allSchools.FirstOrDefault(x => x.Dfe == dfe);
};
{
"Dfe": 0,
"SchoolSearchResult": [
{
"SupplierId": 1,
"SchoolName": "SchoolName000001",
"CreateDate": "0001-01-01T00:00:00",
"Pupils": 123
}],
"PupilSearchResult": [
{
"SupplierId": 1,
"FirstName": "FirstName - Pupil-1-000001",
"LastName": "LastName - Pupil-1-000001"
},
{
"SupplierId": 1,
"FirstName": "FirstName - Pupil-1-000002",
"LastName": "LastName - Pupil-1-000002"
}]
}
getAllDummySearchResults = () => (from dummySupplierId in Enumerable.Range(1, 10)
select new IntegrationSearchResult
{
Dfe = "School-1-" + dummySupplierId.ToString("000000"),
SchoolSearchResult = new SchoolResult
{
SupplierId = dummySupplierId,
SchoolName = "SchoolName" + dummySupplierId.ToString("000000"),
CreateDate = new DateTime(),
Pupils = 123
}
,
PupilSearchResult = new List<PupilResult>
{
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-1-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-1-" + dummySupplierId.ToString("000000")
},
new PupilResult
{
SupplierId = dummySupplierId,
FirstName = "FirstName - Pupil-2-" + dummySupplierId.ToString("000000"),
LastName = "LastName - Pupil-2-" + dummySupplierId.ToString("000000")
}
}
}).Take(1).ToList();