Ter*_*esa 3 c# sql linq linq-to-sql
我正在为我的MVC2应用程序使用Linq-SQL实体.
我有那些表/实体
人(身份证,姓名,姓氏)车(身份证,型号,姓名)经销商(身份证,姓名)
而且我有2到多个表
Persons_Cars(ID,ID_Person,ID_CAR)Persons_Resellers(ID,ID_Person,ID_Reseller)
public MyModel {
//Some Fields
public List<CarPerson> carList;
public CarPerson
{
String detail;
int id;
}
}
var query=(from person in data.Person
join PerCar in data.Persons_Cars on person.ID equals Persons_Cars.ID_Person into JoinedPerCar
from PerCar in JoinedPerCar.DefaultIfEmpty()
join car in data.car on PerCar .id_car equals car.ID into JoinedCarPe
rson
from car in JoinedCarPerson.DefaultIfEmpty()
join PerReseller in data.Persons_Resellers on person.ID equals PerReseller .id_person into JoinedPersReseller
from PerReseller in JoinedPersReseller.DefaultIfEmpty()
join Reseller in data.Reseller on PerReseller.id_reseller equals Reseller.ID into JoinedResellerPers
from Resller in JoinedFormazioneComp.DefaultIfEmpty()
where person.ID_USER == USER.ID
select new MyModel
{
carList = JoinedPerCar.Select(m=>new CarPerson {detail=m.car.Model,id = m.ID}).ToList()},
//Other
});
Run Code Online (Sandbox Code Playgroud)
我知道这是完全错误的,但我是Linq-SQL的新手我现在遇到了一个问题:
查询有效但我的结果是错误的.事实上,如果一个人有2辆车,我会用2个车辆清单两次收回同一个人.
例
布朗先生有2辆汽车我回收布朗先生--->汽车清单(Car1,Car2)布朗先生--->汽车清单(Car1,Car2)
所以我需要的是,如果一个人有2辆车我只得到1个人用他自己的车的结果
有没有办法更好地编写此查询?怎么能解决我的问题?
谢谢
我认为简单的子查询将完成这项工作(对于经销商而言):
from p in data.Person
select new MyModel {
carList = (from pc in data.Persons_Cars
join c in data.car on pc.id_car equals c.ID
where pc.ID_Person == p.ID
select c).ToList()
};
Run Code Online (Sandbox Code Playgroud)
如果您定义了导航属性,那么查询将更加简单(Linq将为您加入):
from p in data.Person
select new MyModel {
carList = p.Person_Cars.Select(pc => pc.Car).ToList()
};
Run Code Online (Sandbox Code Playgroud)