在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,所以当我做最后一次连接时,我有。这两个连接工作得很好。但是有没有更聪明的方法来做到这一点呢?

在linq .net中创建两个内连接来获得想要的结果,有更聪明的方法吗?

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。