在linq .net中创建两个内连接来获得想要的结果,有更聪明的方法吗?
本文关键字:结果 方法 更聪明 创建 net linq 连接 两个 | 更新日期: 2023-09-27 18:18:52
这是我目前所做的两个连接。
public ItemDescriptionIdentity GetDescriptionIdentityInfo(int tradeItemId)
{
var query = (from item in _db.TradeItems
join identity in _db.ItemIdentities on item.itemIdentities equals identity.id
where item.id == tradeItemId
select identity.id).Single();
var result = (from identitys in _db.ItemDescriptionIdentitiesOnTradeItems
join descriptionIdentity in _db.ItemDescriptionIdentities on identitys.itemDescriptionIdentitieId equals descriptionIdentity.id
where identitys.itemIdentitiesId == query
select descriptionIdentity);
return result.FirstOrDefault() as ItemDescriptionIdentity;
}
为了获得ItemDescriptionIdentity,我首先需要做一个连接,在那里我找到身份id,所以当我做最后一次连接时,我有。这两个连接工作得很好。但是有没有更聪明的方法来做到这一点呢?
public ItemDescriptionIdentity GetDescriptionIdentityInfo(int tradeItemId)
{
var query = (from item in _db.TradeItems
join identity in _db.ItemIdentities
on item.itemIdentities equals identity.id
join identitys in _db.ItemDescriptionIdentitiesOnTradeItems
on identitys.itemIdentitiesId equals identity.id
join descriptionIdentity in _db.ItemDescriptionIdentities
on identitys.itemDescriptionIdentitieId equals descriptionIdentity.id
where item.id == tradeItemId
select descriptionIdentity);
return result.FirstOrDefault() as ItemDescriptionIdentity;
}
我不知道你的模型是否正确但你可以用
之类的东西替换第二部分的查询(_db.TradeItems.Where(ti => ti.id==tradeItemId).First().itemIdentities.First().id)
我的假设:有一个TradeItems列表,您可以在其中选择一个通过tradeItemId
。不知道是哪一种,但你可以找FindByKey
这样的方法。请确保永远不要在没有相应TradeItem的情况下传递id(否则使用' FirstOrDefault'并包含错误处理)。
这个tradeItem的实例似乎有一个属性"itemIdentities"(它似乎是一个列表…找到合适的身份有什么标准吗?我只需要选择第一个并返回它的id。