gpt4 book ai didi

c# - 查询 Linq 加入多对多

转载 作者:行者123 更新时间:2023-11-30 13:38:37 25 4
gpt4 key购买 nike

我正在为我的 MVC2 应用程序使用 Linq-SQL 实体。

我有那些表/实体

Person ( ID , Name , Surname ) Car (ID , Model , Name) Reseller ( ID , Name)

我有那 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
});

我知道这是完全错误的,但我是 Linq-SQL 的新手我现在有一个问题:

查询有效,但我的结果是错误的。事实上,如果一个人有 2 辆车,我会两次收到同一个人的 2 辆汽车 list 。

例子

布朗先生有 2 辆车我收到布朗先生 ---> 汽车 list (Car1,Car2)Mr Brown ---> 汽车 list (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()
};

如果您定义了导航属性,那么查询会更加简单(Linq 会为您做连接):

from p in data.Person
select new MyModel {
carList = p.Person_Cars.Select(pc => pc.Car).ToList()
};

关于c# - 查询 Linq 加入多对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15785763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com