如何使用LINQ匹配c#中两个列表中的特定属性

本文关键字:列表 两个 属性 LINQ 何使用 匹配 | 更新日期: 2023-09-27 18:00:58

我正在为一个家庭项目使用实体框架。

例如,假设我有两个列表:A和B

我需要能够根据列表A和B中的共同属性匹配列表A和列表B中的项目(选择列表A和表B中具有相同价值和相同城市的所有房屋(

一个House在两个列表中可以有两个共同的属性(比如Value和City(,但其他一些属性可能不同(比如HouseId(,因此比较对象不会返回正确的匹配。

我可以做两个嵌套的foreach,但由于LINQ查询是使用EF查询数据库的,所以我需要使用LINQ。

这就是我目前所做的,但匹配不正确:

    public IEnumerable<ApplicationUser> GetMatchesForCurrentUser(ApplicationUser     currentUser)
    {
        var prematches = (from user in _memberRepository.All()
                          where user.Zone == currentUser.Zone &&
                                user.Time == currentUser.Time &&
                                user.HouseOfUser.Any(g => currentUser.HouseOfUser.Any(x => x.CityId == g.CityId))
                          select user).ToList();
        var matches = (from prematch in prematches
                       where prematch.HouseOfUser.Any(g => currentUser.HouseOfUser.Any(x => x.Value == g.Value))
                       select prematch).ToList();
        return matches;
    }

如何使用LINQ匹配c#中两个列表中的特定属性

您可以使用&&运算符简单地组合两个属性的相等性检查,例如:

var prematches = (from user in _memberRepository.All()
                  where user.Zone == currentUser.Zone &&
                        user.Time == currentUser.Time &&
                        user.HouseOfUser.Any(g => currentUser.HouseOfUser.Any
                                                 (
                                                    x => x.CityId == g.CityId
                                                            &&
                                                         x.Value == g.Value
                                                 )
                                            )
                  select user).ToList();