1

次の行にヒットすると、結合Rolesテーブルに「ローカル」が表示されているかどうかに関係なく、常に true を受け取ります。

if (objUserRoles.Select(x => (x.Role.Role1 == "local")).Count() > 0)

私の構文は正しいですか?

4

7 に答える 7

10

あなたが探しています:

if (objUserRoles.Any(x => x.Role.Role1 == "local"))

あなたがしているのは、一連のを選択することですbool。たとえば、クエリが返すアイテムが3つある場合、それがtrueであった場所のオブジェクトだけでなく、false, true, falseそのシーケンスに対して要求した式。false, true, falseその一連のboolが真である値を選択しようとしているようです。つまり、のWhere代わりに使用する必要がありSelectます。ただし、実際にそれを実行していて、少なくとも1つをチェックしているので、実行する必要がありますWhere。これにより、はるかに効率的に実行できます。CountAny

于 2012-05-10T15:06:24.787 に答える
7

必要なものはWhere

if (objUserRoles.Where(x => x.Role.Role1 == "local").Count() > 0)

または、Anyそれはさらに優れています(そして、ほとんどの場合、コレクション全体を反復処理しないため、パフォーマンスが向上しますCount()

 if (objUserRoles.Any(x => x.Role.Role1 == "local"))
于 2012-05-10T15:06:16.193 に答える
1

Where拡張メソッドを使用する

状態をチェックします

if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Count() > 0)

また

任意の拡張メソッド

if (objUserRoles.Any(x => x.Role.Role1 == "local"))
于 2012-05-10T15:06:25.660 に答える
1

.Select(expr)の代わりに.Where(expr)を使用したいと思います。

于 2012-05-10T15:06:45.147 に答える
1

それはより良いですAny

if (objUserRoles.Where(x => (x.Role.Role1 == "local")).Any())
于 2012-05-10T15:07:04.383 に答える
1

他の人が指摘したように、 .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 でした。

明確化があなたにとって理にかなっていることを願っています! :)

于 2012-05-10T15:13:29.310 に答える
0

あなたの 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"))
于 2012-05-10T15:09:46.067 に答える