使用嵌套的LINQ查询和对象集合

时间:2012-07-06 19:13:53

标签: c# asp.net linq collections nested

我正在使用两个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

2 个答案:

答案 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));