我正在使用两个LINQ查询(嵌套)
这就是我希望我的查询实现的目的:
在我的内部查询中
UserLocation
个对象的集合在我的外部查询中
User
个对象集合,其中User.UID
与内部查询中的集合中每个UserLocation.UID
对象的属性UserLocation
匹配。我几乎有代码,我只是错过了最后一步 - 我不知道如何让外部查询枚举UserLocation
集合并匹配{{1} }。
在我的代码中,我有两个查询,最上面的一个是使用内部查询和我需要的条件获取UID
对象的FullName
属性的一个工作示例(以及匹配{ {1}})。
第二个问题是我遇到麻烦的问题。我错过了什么?
User
我忘记了UID
是 ownerLiteral.Text =
Users.First(u => u.UID.Equals(
UserLocations.First(s => s.IsOwner == true && s.LID.Equals(building.LID)).UID)).FullName;
var propertyteam =
Users.Where(c => c.UID.Equals(
UserLocations.Where(x => x.IsPropertyTeam == true && x.LID.Equals(building.LID))));
的成员 - 我缩短了查询并使用UserLocations
选择符合我条件的Users
成员,然后只需返回.Any
。
在第一个查询中,我返回UserLocations
对象的User
。
在第二个查询中,我现在返回符合条件的FullName
个对象的集合。
对于那些感兴趣的人,我将第二个查询绑定到DataList,然后在用户控件中评估他们的FullName。
User
答案 0 :(得分:1)
您的班级关系令我感到困惑,但我认为您的问题在于您尝试将UserLocation
个对象集合(Where()
返回IEnumerable
)作为单个{ {1}}
我认为这可能会这样做:
UserLocation
根据更多信息进行修改:
所以也许这就是你要找的东西?
var propertyteam = LoggedInUser.ExtranetUser.Company.Users
.Where(c => c.UID.IsPropertyTeam == true && c.UID.LID.Equals(building.LID));
假设UserLocation的UID成员是一个完整的User对象,而不仅仅是User的某个int ID。
答案 1 :(得分:0)
要编写T-SQL类型IN子句,在LINQ中您将使用Contains。这将是我开始的地方:
var userlocations = LoggedInUser.ExtranetUser.UserLocations.Select(ul => ul.UID);
var propertyteam = LoggedInUser.ExtranetUser.Company.Users.Where(userlocations.Contains(u => u.UID));