[解決済み】Linq to Entities - SQL "IN "句
2022-04-19 02:23:11
質問
T-SQLでは、次のようなクエリになります。
SELECT * FROM Users WHERE User_Rights IN ("Admin", "User", "Limited")
LINQ to Entitiesクエリでどのようにそれを再現するのでしょうか?それは可能なのでしょうか?
解決方法は?
考え方からしてひっくり返す必要があります。 適用可能なユーザー権限の定義済みセットから現在のアイテムのユーザー権限を見つけるために "in" を行うのではなく、ユーザー権限の定義済みセットが現在のアイテムの適用可能な値を含んでいるかどうかを尋ねているのです。 これは、.NETの通常のリストで項目を見つける方法と全く同じです。
LINQを使用してこれを行うには、クエリ構文を使用する方法と、メソッド構文を使用する方法の2つがあります。 基本的に、これらは同じであり、好みによって使い分けることができます。
クエリーシンタックス。
var selected = from u in users
where new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights)
select u
foreach(user u in selected)
{
//Do your stuff on each selected user;
}
メソッドのシンタックス。
var selected = users.Where(u => new[] { "Admin", "User", "Limited" }.Contains(u.User_Rights));
foreach(user u in selected)
{
//Do stuff on each selected user;
}
この場合、個人的にはメソッド構文の方が好みかもしれません。なぜなら、変数を代入する代わりに、このように無名呼び出しでforeachを実行できるからです。
foreach(User u in users.Where(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}
構文的にはもっと複雑で、ラムダ式やデリゲートの概念を理解していないと、何が起こっているのかよくわからないかもしれませんが、見ての通り、これはかなりコードを凝縮しています。
この3つの例は、同じことをするにもかかわらず、微妙に違うのです。
別の方法では、LINQを使用せずに、同じメソッド構文で"where"を"FindAll"に置き換えて同じ結果を得ることができ、これは.NET 2.0でも機能することになります。
foreach(User u in users.FindAll(u => new [] { "Admin", "User", "Limited" }.Contains(u.User_Rights)))
{
//Do stuff on each selected user;
}
関連
-
[解決済み] LINQを使用してList<T>から要素を削除する
-
[解決済み] NetFx45WebLinkとNetFx45RedistLinkの違いは何ですか?
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] DelphiとDelphi.NETの違いについて
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] LINQで複数の "order by "を使用する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] DataTableに対するLINQクエリ
-
[解決済み] LINQ を使用して、ある List<> にある項目を別の List<> にない項目として取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] CLSID {XXXX} を持つコンポーネントの COM クラスファクトリの取得は、次のエラーにより失敗しました: 80040154。
-
[解決済み] ファイル *.mdf をデータベースとして添付できません。
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] SQL Server Compact EditionデータベースのLINQ to SQLで、"Row not found or changed "例外を解決するにはどうすればよいですか?
-
[解決済み] LINQ: フィルタリング基準で SingleOrDefault と FirstOrDefault() を使用する場合
-
[解決済み] CryptographicException「キーセットが存在しない」、ただしWCF経由に限る
-
[解決済み] 埋め込みリソーステキストファイルの読み方
-
[解決済み] WPFの場合、x:Name属性とName属性の違いは何ですか?
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] LINQのWhere IN句 [重複]について