-3

次のようなテーブルがあります。

UserID | FruitID
  4    |    34
  4    |   4355
  4    |   652
  5    |   5677
  5    |    562
  4    |    562

今のところ、次のように UserID と FruitID を渡しています。

var IsAuthorized = MyDC.FruitTable
                       .Any(f => f.UserID == TheUserID && 
                                 f.FruitID == TheFruitID);

これはブール値を返します。ここで、FruitID のリストに対して同じことを書きたいと思います。UserID と複数の FruitID を渡し、次のブール値が必要です"ALL the FruitIDs have a UserID == to the TheUserID"

リストに FruitID == f.FruitID && f.UserID == UserID と一致しない要素が 1 つだけ含まれている場合、リスト全体に対して false が返されることに注意してください。

FruitID のリストを取得するようにクエリを書き直すにはどうすればよいですか?

4

2 に答える 2

5

サンプルコードがコンパイルされないという事実を残しておくと、次のようなものが必要になると思われます。

// Here fruitIDs is a List<int> for the "target" fruit IDs
var isAuthorized = MyDC.FruitTable
                       .Where(u => fruitIDs.Contains(u.FruitID))
                       .All(u => u.UserID == TheUserID);

これにより、フルーツ ID が指定されたリストに含まれるすべてのエントリ、指定されたユーザー ID と一致することが確認されます。もちろん、別の書き方もあります。

元のコレクションのすべてのエントリに有効なフルーツ ID があるかどうかはチェックしません。それが目的だったのかどうかは、質問からは明らかではありません...

于 2012-10-15T16:07:12.663 に答える
1

listVariable.Contains(...) を使用

        MyDC.FruitTable
                   .Where(x => x.UserID == TheUserID)
                   .All(x => listOfFruitIds.Contains(x.FruitID));
于 2012-10-15T16:07:09.220 に答える