簡體   English   中英

使用LINQ LAMBDA基於公共ID連接兩個類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM