1

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

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

在我的内心查询中

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

在我的外部查询中

  • 从内部查询的集合中检索与每个对象的属性匹配的过滤User对象集合。User.UIDUserLocation.UIDUserLocation

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

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

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

            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对象User

在第二个查询中,我现在返回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)));
4

2 回答 2

1

您的班级关系让我感到困惑,但我认为您的问题是您试图将UserLocation对象集合(Where()返回 an 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。

于 2012-07-06T19:29:24.867 回答
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));
于 2012-07-06T19:38:42.037 回答