c# - Linq用4个不同的外键加入同一张表
问题描述
所以我得到了我的地址表和我的合同表。我想遍历所有合约并从中生成一些 Dto,但使用地址名称和编号而不是 id(guid)。我的问题是合同表中的地址表上有 4 个外键。我仍然可以通过某种方式加入,甚至可以使用多个加入吗?
这就是我目前正在尝试的:
var contracts = context.Contracts
.Join(context.Addresses,
(con => con.AddressId),
(adr => adr.AddressId),
(con,adr)
=> new { contractInfo = con, addressInfo = adr });
foreach(var a in contracts) {
new MyDto() {
AddressId = a.addressInfo.AddressNumber,
AddressName = a.addressInfo.FullName,
Date= a.contractInfo.Date,
AnotherDate = a.contractInfo.AnotherDate,
Text = a.contractInfo.Text,
VerweisAdrId = a.addressInfo. // ???
VerweisAdrName = a.addressInfo. // 2 more cases like this would follow
}
}
我的其他方法可能会产生太多的查询:
var addresses = context.Addresses;
var contracts = context.Contracts;
foreach(var a in contracts) {
new MyDto() {
AddressId = addresses.Where(x => a.AddressId == x.AddressId).Select(y => y.AddressNumber);
AddressName = addresses.Where(x => a.AddressId == x.AddressId).Select(y => y.FullName);
Date= a.Date,
AnotherDate = a.AnotherDate,
Text = a.Text,
VerweisAdrId = addresses.Where(x => a.VerweisAdrId == x.AddressId).Select(y => y.AddressNumber);
VerweisAdrName = addresses.Where(x => a.VerweisAdrId == x.AddressId).Select(y => y.FullName);
}
}
解决方案
var contracts = context.Contracts
.Join(context.Addresses,
(con => con.AddressId),
(adr => adr.AddressId),
(con,adr)
=> new { contractInfo = con, addressInfo = adr })
.Join(context.Addresses,
ca => ca.contractInfo.VerweisAdrId,
adr => adr.AddressId,
(ca, adr) => new { ca.contractInfo, ca.addressInfo, verweisAdr = adr })
// ... and so on
.Select(cavwx => new MyDto() {
AddressId = cavwx.addressInfo.AddressNumber,
AddressName = cavwx.addressInfo.FullName,
VerweisAdrId = cavwx.verweisAdr.AddressNumber,
VerweisAdrName = cavwx.verweisAdr.FullName,
// ... and so on
});
推荐阅读
- python - 将错误文本转换为韩语
- flutter - Flutter Web 将文本元素渲染为 HTML、CSS、JS
- node.js - 如何使用useEffect正确处理firebase实时数据库监听器?
- git - 在 Packer 中,您可以在 git 存储库中为 Inspec 配置器指定路径吗?
- postgresql - postgres 选择语句,提取时间很长
- android - 在打盹模式下使用 Ably 的问题
- python - 泰勒级数 cos(x) +1 与 Tensorflow
- javascript - 如何查看 client.on("channelUpdate" discord.js v.12 的权限更新
- android - ImageLoaderSourceHandler:无法检索图像或图像数据无效
- python - 如何仅在 python 中使用条带获取当前日期的发票?