次の行にヒットすると、結合Roles
テーブルに「ローカル」が表示されているかどうかに関係なく、常に true を受け取ります。
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
私の構文は正しいですか?
あなたが探しています:
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
あなたがしているのは、一連のを選択することですbool
。たとえば、クエリが返すアイテムが3つある場合、それがtrueであった場所のオブジェクトだけでなく、false, true, false
そのシーケンスに対して要求した式。false, true, false
その一連のboolが真である値を選択しようとしているようです。つまり、のWhere
代わりに使用する必要がありSelect
ます。ただし、実際にそれを実行していて、少なくとも1つをチェックしているので、実行する必要がありますWhere
。これにより、はるかに効率的に実行できます。Count
Any
必要なものはWhere
:
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
または、Any
それはさらに優れています(そして、ほとんどの場合、コレクション全体を反復処理しないため、パフォーマンスが向上しますCount()
)
if (objUserRoles.Any(x => x.Role.Role1 == "local"))
.Select(expr)の代わりに.Where(expr)を使用したいと思います。
それはより良いですAny
if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
他の人が指摘したように、 .Any() または .Where().Count() は、探しているものを提供します。あなたのコード...
if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)
...実際には、IEnumerable<bool>
に基づいて各項目が true/false である場所を作成していx.Role.Role1 == "local"
ます。.Count()
objUserRoles コレクションに実際に 0 要素が含まれていない限り、IEnumerable<bool>
は常に 0 より大きいため、最終結果は常に true でした。
明確化があなたにとって理にかなっていることを願っています! :)
あなたの are not ステートメントはあなたの何かobjUserRoles
を aboolean
に変換するので、結果セットは
objUserRoles.Select(x => (x.Role.Role1 == "local"))
コレクションのIEnumerable<bool>
要素と同じ数のです。objUserRoles
あなたがやりたいことは、次のクエリで説明されていると思います
if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)
またはさらに良い
if (objUserRoles.Any(x => x.Role.Role1 == "local"))