【问题标题】:Using nested LINQ queries and collections of objects使用嵌套的 LINQ 查询和对象集合
【发布时间】:2012-07-06 19:13:52
【问题描述】:

我正在使用两个 LINQ 查询(嵌套)

这是我希望我的查询实现的目标:

在我的内心查询中

  • 使用两个条件检索UserLocation 对象的集合

在我的外部查询中

  • 检索过滤后的 User 对象集合,其中 User.UID 与内部查询集合中每个 UserLocation 对象的属性 UserLocation.UID 匹配。

我几乎就代码而言,我只是错过了最后一步——我不知道如何让外部查询枚举UserLocation 集合并匹配UID

在我的代码中,我有两个查询,最上面的一个是使用内部查询和我需要的条件(以及匹配UID)获取User 对象的FullName 属性的工作示例。

第二个查询是我遇到的问题。我错过了什么?

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

编辑:修复问题

我忘记了UserLocationsUsers 的成员——我缩短了查询并使用.Any 选择了符合我条件的UserLocations 成员,然后只返回User

在第一个查询中,我为User 对象返回FullName

在第二个查询中,我现在返回符合条件的 User 对象集合。

对于那些感兴趣的人,我将第二个查询绑定到 DataList,然后在用户控件中评估他们的 FullName。

ownerLiteral.Text = 
            Users.First(
            u => u.UserLocations.Any(
                ul => ul.IsOwner == true && ul.LID.Equals(building.LID))).FullName;

var propertyteam = 
            Users.Where(
            u => u.UserLocations.Any(
                ul => ul.IsPropertyTeam && ul.LID.Equals(building.LID)));

【问题讨论】:

    标签: c# asp.net linq collections nested


    【解决方案1】:

    您的类关系让我感到困惑,但我认为您的问题是您试图将 UserLocation 对象的集合(Where() 返回 IEnumerable)视为单个 UserLocation

    我认为这可能会做到:

    var propertyteam = LoggedInUser.ExtranetUser.Company.Users
      .Where(c => c.UID.IsPropertyTeam == true && c.UID.LID.Equals(building.LID));
    

    根据更多信息进行编辑:

    所以也许这就是你要找的东西?

    var uidsWhoArePartOfThePropertyTeamForThisBuilding
      = UserLocations.Where(x => x.IsPropertyTeam && x.LID == building.LID)
      .Select(x => x.UID);
    

    假设 UserLocation 的 UID 成员是一个完整的用户对象,而不仅仅是用户的一些 int ID。

    【讨论】:

    • 抱歉,我会稍微清理一下代码。我确实想返回 UserLocations 的集合。 UserLocations 是 Locations 和 Users 之间的“链接”数据库,并指定它们是否已连接。每个 LID(位置 ID)都与一个 UID(用户 ID)匹配,然后具有 IsOwner 或 IsPropertyTeam 属性。用户只包含 UID。
    • 见我上面的编辑。您确定要收集 UserLocations 吗?你打算用它做什么? o_O
    • 很接近,我正在编辑我的问题以包含我找到的答案。我忘记了UserLocations 也是Users 的属性。感谢您的帮助!
    【解决方案2】:

    要编写 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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多