1

2 つの LINQ クエリ (ネスト) を使用しています

クエリで達成したいことは次のとおりです。

私の内部クエリでは

  • UserLocation2 つの条件を使用してオブジェクトのコレクションを取得する

私の外側のクエリで

  • 内部クエリのコレクションから、各オブジェクトのプロパティに一致するフィルター処理されたUserオブジェクトのコレクションを取得します。User.UIDUserLocation.UIDUserLocation

私はコード的にはほとんどそこにいます.最後のステップが欠けているだけです-外部クエリを取得してUserLocationコレクションを列挙し、UID.

私のコードには 2 つのクエリがあります。一番上のクエリは、内部クエリと必要な条件 (および matching ) を使用してオブジェクトのFullNameプロパティを取得する実際の例です。UserUID

2 番目のクエリは、私が問題を抱えているクエリです。私は何が欠けていますか?

            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を選択してから、 .UserLocationsUser

最初のクエリFullNameでは、Userオブジェクトの を返します。

2 番目のクエリではUser、条件に一致するオブジェクトのコレクションを返します。

興味のある方のために、2 番目のクエリを 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()返す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 メンバーは User オブジェクト全体であり、User の 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 に答える