让我们假设:
- 我有一个 EVENT 表
- 我有一个 CLIENT 表
- ADDRESS 表有一些列:UnitNo、StreetNo、StreetName、City、AddressType 等
- 客户有很多事件,客户也可以有很多地址
因此,如果我想用客户 HOME 地址街道名称查询事件列表,我就去
var qry = db.Events
.Select(evt => new {
EventAddress =
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetName
});
但是,如果我想获得完整的地址,我需要连接多个地址字段。目前我正在尝试类似的东西
var qry = db.Events
.Select(evt => new {
EventAddress =
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetNo + " " +
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).StreetName + " " +
evt.Client
.Addresses
.FirstOrDefault(a => a.AddressType.Equals("HOME")).City
});
它不起作用,看起来也很丑
有没有更好的方法来制作
evt.Client.Addresses.FirstOrDefault(a => a.AddressType.Equals("HOME"))
“可重复使用”,所以我可以去
var qry =
db.Events
.Select(evt => new {
EventAddress =
STUFF.StreetNo + " " + STUFF.StreetName + " " + STUFF.City
});
提前谢谢了!
休
更新:
感谢伊利安的回答,效果很好。基于此,我创建了答案的扩展版本
var qry =
db.Events
.Select(evt => new {
EventAddress =
db.Addresses.Select(a => new
{
ClientId = a.ClientId,
AddressType = a.AddressType,
FullAddress = (a.addStreetNo ?? "") + (a.addStreetName ?? "")
})
.FirstOrDefault(a => a.ClientId == e.Client.ClientId && a.AddressType.Equals("HOME"))
.FullAddress
});