次の行にヒットすると、結合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。これにより、はるかに効率的に実行できます。CountAny
必要なものは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"))