C# 仅选择联接表时EF Core联接
我有三种型号(最少): 我正在尝试在C# 仅选择联接表时EF Core联接,c#,entity-framework,linq,entity-framework-core,C#,Entity Framework,Linq,Entity Framework Core,我有三种型号(最少): 我正在尝试在personaddress和Address之间进行连接,这样我只剩下Address类型的列表/查询 通过使用教程,我成功地获得了PersonalAddress和Address的匿名类型集合,但我确信下面的查询有一个简单的修改,它给出了我想要的: var anonTypeOfTwoTables = _context.PersonAddresses .Where(x => x.Person.PersonId == pe
personaddress
和Address
之间进行连接,这样我只剩下Address
类型的列表/查询
通过使用教程,我成功地获得了PersonalAddress
和Address
的匿名类型集合,但我确信下面的查询有一个简单的修改,它给出了我想要的:
var anonTypeOfTwoTables = _context.PersonAddresses
.Where(x => x.Person.PersonId == personId)
.Join(_context.Addresses,
person => person.Person.PersonId,
address => address.AddressId,
(address, personAddress) => new
{
Address = address,
PersonAddress = personAddress
});
其中,personId
只是传递给包含方法的一个int
我可以让查询只返回
列表地址=_context…
而不是var anonTypeOfTwoTables…
如果您对EF模型进行了映射配置,则不需要显式调用join
var anonTypeOfTwoTables = _context.PersonAddresses
.Where(x => x.Person.PersonId == personId)
.Join(_context.Addresses,
person => person.Person.PersonId,
address => address.AddressId,
(address, personAddress) => new
{
Address = address,
PersonAddress = personAddress
});
结果是
var anonTypeOfTwoTables = _context.PersonAddresses
.Where(x => x.Person.PersonId == personId)
.Select( x => new {
PersonAddress = x,
Address = x.Address
});
如果您只需要地址,为什么要创建一个包含两个记录的匿名类型?为什么不
(address,PersonalAddress)=>address
?我不知道为什么,我只是在学习一个关于加入的教程!如果您不小心,这些教程将引导您采用先解决问题,后解决问题的编程方式。这里似乎就是这样,因为您也不需要显式连接来实现您的目标。请看@DervişKayımbaşıoğluIt的答案,它是我找到的最接近我想要的东西,但我不知道如何将它最小化到我想要的程度。如果我这样做了,我就不需要问这个问题了:D-答案帮助我发现了EF的乐趣,我甚至能够使用它并在三个表中进行选择,而无需在项目的另一部分使用联接。
var anonTypeOfTwoTables = _context.PersonAddresses
.Where(x => x.Person.PersonId == personId)
.Select( x => new {
PersonAddress = x,
Address = x.Address
});