C# 使用LINQ LAMBDA基于公共id连接两个类

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)

我想使用lambda/linq,基于一个公共id连接到两个类,该id从父表生成一行,从子表生成两行。我已经在下面粘贴了,到目前为止我已经尝试过了,但是我得到的是每行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();