C# Linq-使用外部联接数据填充列表
是否可以使用linq查询为任何外部联接子查询的列表填充类 我尝试过各种不同的方法,但都没能成功 另一种选择是通过有更多的查询来填充类,但这会导致性能下降 下面是一个示例,我尝试使用单个查询填充MyClassC# 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
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.list1[UserQuery+PersonCar]ToList[PersonCar](System.Collections.Generic.IEnumerable
1[UserQuery+PersonCar])方法,此方法无法转换为存储表达式。