[英]Joining two classes based on common id using LINQ LAMBDA
我想使用lambda / linq加入基於公共ID的兩個類,該ID導致父表有1行,子表有2行。 我已經在下面粘貼了,到目前為止我已經嘗試過,但是得到的是每行10行,這是不正確的。 歡迎對該規范提出任何建議或修改。
類
namespace x
{
public class IntegrationSearchResult
{
public string Dfe { get; set; }
public SchoolResult SchoolSearchResult { get; set; }
public List<PupilResult> PupilSearchResult { get; set; }
}
public class SchoolResult
{
public int SupplierId { get; set; }
public string SchoolName { get; set; }
public DateTime CreateDate { get; set; }
public int Pupils { get; set; }
}
public class PupilResult
{
public int SupplierId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
職能
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);
};
預期結果:學校SearchResult應該顯示一行,並且對應的學生是兩行,具有相同的供應商ID。
{
"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();
它只會從子級集合中選擇兩條記錄,並且當您在相等性上調用第二個方法時,它將調用第一個方法從子類中獲取兩行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.