C# Linq-使用外部联接数据填充列表

C# Linq-使用外部联接数据填充列表,c#,entity-framework,linq,linq-to-entities,C#,Entity Framework,Linq,Linq To Entities,是否可以使用linq查询为任何外部联接子查询的列表填充类 我尝试过各种不同的方法,但都没能成功 另一种选择是通过有更多的查询来填充类,但这会导致性能下降 下面是一个示例,我尝试使用单个查询填充MyClass var result = from p in PersonTable join cars in CarTable on p.id equals cars.id_person into carsGroup.DefaultIfEmpty() select new MyClass { Pe

是否可以使用linq查询为任何外部联接子查询的列表填充类

我尝试过各种不同的方法,但都没能成功

另一种选择是通过有更多的查询来填充类,但这会导致性能下降

下面是一个示例,我尝试使用单个查询填充MyClass

var result = from p in PersonTable
join cars in CarTable on p.id equals cars.id_person into carsGroup.DefaultIfEmpty()
select new MyClass
{
    Person = new Person
    {
        Id = p.id,
        Name = p.name
    },
    Cars = new List<Car>()
    {
        Id = carsGroup....??

    }
}

    public class MyClass
    {
        public Person Person { get; set; }
        public List<PersonCar> Cars { get; set; }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }

    }   

    public class PersonCar
    {
        public int Id { get; set; }
        pubint int IdPerson {get; set;}
        public string Description { get; set; }
    }
var result=来自PersonTable中的p
将cars加入CarTable on p.id等于cars.id\u person到carsGroup.DefaultIfEmpty()中
选择新MyClass
{
人=新人
{
Id=p.Id,
Name=p.Name
},
Cars=新列表()
{
Id=车辆组。。。。??
}
}
公共类MyClass
{
公众人物{get;set;}
公共列表车辆{get;set;}
}
公共阶层人士
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}   
公营人员
{
公共int Id{get;set;}
pubint-IdPerson{get;set;}
公共字符串说明{get;set;}
}

您提供的LINQ查询不正确。下面的测试将演示您可能正在寻找的功能:

    [TestMethod]
    public void TestMethod1()
    {
        var PersonTable = new List<Person>
        {
            new Person
            {
                Id = 1,
                Name = "Test1"
            },
            new Person
            {
                Id = 2,
                Name = "Test2"
            },
        };
        var CarTable = new List<PersonCar>
        {
            new PersonCar
            {
                Id = 1,
                IdPerson = 2
            },
            new PersonCar
            {
                Id = 2,
                IdPerson = 3
            }
        };

        var result = (from person in PersonTable
            join cars in CarTable on person.Id equals cars.IdPerson into carsGroup
                     from args in carsGroup.DefaultIfEmpty()
            select new MyClass
            {
                Person = person,
                Cars = carsGroup.ToList()
            }).ToList();

        Assert.AreEqual(2, result.Count);
        Assert.AreEqual(1, result.Count(res => res.Cars.Count == 0));
        Assert.AreEqual(1, result.Count(res => res.Cars.Count == 1));
    }
[TestMethod]
公共void TestMethod1()
{
var PersonTable=新列表
{
新人
{
Id=1,
Name=“Test1”
},
新人
{
Id=2,
Name=“Test2”
},
};
var CarTable=新列表
{
新人
{
Id=1,
Iperson=2
},
新人
{
Id=2,
Iperson=3
}
};
var结果=(来自PersonTable中的person)
将cars加入CarTable on person.Id等于cars.IdPerson加入carsGroup
来自carsGroup.DefaultIfEmpty()中的参数
选择新MyClass
{
人,
Cars=carsGroup.ToList()
}).ToList();
Assert.AreEqual(2,result.Count);
arenequal(1,result.Count(res=>res.Cars.Count==0));
aresequal(1,result.Count(res=>res.Cars.Count==1));
}

Cars=carsGroup.ToList()
?您最初有两个列表1)人员列表2)车辆列表。然后进行初始加入。您缺少初始车辆列表。@导致无法将类型“System.Collections.Generic.list”隐式转换为“System.Collections.Generic.list”,然后
cars=carsGroup.Select(r=>new Car{Id=r.Id,…})。ToList()
LINQ to Entities无法识别方法“System.Collections.Generic.list
1[UserQuery+PersonCar]ToList[PersonCar](System.Collections.Generic.IEnumerable
1[UserQuery+PersonCar])方法,此方法无法转换为存储表达式。