[英]Linq query to include number of items of a joined collection
我在数据库中有三个表
假设一个人有一个地址,但可以上传多张照片。 我想编写一个 Linq 查询来生成一个包含类似项目的连接集合
{
PersonId: 5;
Name: "Jack";
CityName: "Edmonton";
NumOfUploadPhoto: 10;
}
Linq 查询是什么样的? 谢谢
所以你在 Addresses 和 Persons 之间有一个一对多的关系:每个 Address 都有零个或多个 Persons,每个 Person 都生活在一个 Address 上,即外键 Person.AddressId 所指的 Address。
同样,Persons 和 Photos 之间存在一对多的关系:每个 Person 都上传了零个或多个 Photos,每张 Photo 都由外键 Photo.PersonId 所指的 Person 上传。
每当您拥有“带有零个或多个子项目的项目”时,例如学校及其学生,客户及其订单,或者在您的情况下:上传照片的人,请考虑使用Enumerable.GroupJoin 。
反过来:如果您有一个项目,并且您想要外键引用的唯一一个项目:学生与他就读的学校,与下订单的客户的订单,或者在您的情况下:与他居住的城市的人,考虑使用Enumerable.Join
在一对多中,如果您希望具有许多子项的一项从一侧开始并使用 GroupJoin。 如果您想要具有外键引用的一项的子项,请从多方开始并使用 Join。
您想要拥有许多照片的 Person 和外键引用的一个地址。
var person = dbContext.Persons.GroupJoin(dbContext.UploadedPhotos,
person => person.PersonId, // from every Person take the primary key
photo => photo.PersonId, // from ever Photo take the foreign key to the Person
// parameter resultSelector: from every Person, with its zero or more Photos, make one new:
(person, photosOfThisPerson) => new
{
PersonId = person.PersonId,
Name = person.Name,
NumberOfUploadedPhotos = photosOfThisPerson.Count(),
Address = dbContext.Addresses.Where(address => address.AddressId == person.AddressId)
FirstOrDefault(),
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.