如何使用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;
}
您可以使用&&
运算符简单地组合两个属性的相等性检查,例如:
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();