2011-01-04 3 views
0

私はこののLINQでどこ方法で2つのエンティティまたは句

userRepository.Users.Where(u=>u.RoleID == 1 || u=>u.RoldID == 2).Select(o => new SelectListItem { Text = o.Role.RoleName, Value = o.RoleID.ToString() }).ToList(); 

に等しくなりますLINQの2つのエンティティにおける方法はもちろんの問題が(U => Uである場合に使用する使用。 RoleID == 1 || u => u.RoldID == 2) 問題は、WHERE節をORでWHERE節を使用する方法がわかりません。

任意のアイデアは、(上記のコードは、ラムダ式のC/Bのコースコンパイルされません。

userRepository.Usersユーザーのエンティティのリストを返します。

を、私はそれを推測して使用して行うことができます.Whereの連結()。()が、私はORを必要としています。

答えて

3

ちょうどあなたのコードで=>

Where(u => u.RoleID == 1 || u.RoleID == 2). 

余分Uを削除し、あなたがラムダをしようとする "または"、「lambda1 ORλ2 "、これはあなたが気づいたようには不可能です。 あなたはしかし缶 "または" ラムダ内の式:

ラムダ(式1または式)

コードを読むのように:

(ユーザーユーザー) { 戻りuser.RoleId == 1 || user.RoleId == 2; }

それは物事がより明確になります場合は...

はまた、私はあなたが最後の部分にタイプミスを持っている代わりにRoleIdの "u.RoldId == 2" を、推測..使用しています

+0

ありがとう、シンプルだが、誰が知っているだろう... ;-)誤植は編集中だった。私は列挙型を削除して、それをより短くするよう書き直した。余分なu =>が問題でした。 – Dani

1

一般的な匿名の代理人(この場合はFunc)。

「ユーザーがブール値を返した場合」、または「ユーザーが指定されている場合は、そのユーザーを選択する必要があるかどうかを判断する基準を指定する」ということです。

ラムダ式では、「指定された」変数を1回だけ定義する必要があります。

基本的な構文は、我々はuは、ユーザーと(表現)である

u => (expression) 

を持っている。この場合、

variableName => expression 

ではブールに評価される式です。 (ロジャーが指摘私はこのポストを終えた間は正解であるように)をやって

、または任意の他の論理比較がまったく同じ

Where(u=> u.Name.Equals(userName) && u.Email.Equals(email)) 

あなたは次のようになり

Where(u => (u.RoleID==1 || u.RoleID==2)) 

任意の式を持つことができますが、唯一の条件はブール値を返すことです。あなたが与えた変数を無視する式がうまくいても。

Where(u=> true) 

これはすべてのユーザーを選択しますが、おそらく無意味ですが、ラムダ式の構造を示しています。

EDIT:この記事を投稿するまで、Rogerの編集が提供してくれた追加情報は私には分かりませんでしたが、重複して申し訳ありません。

+0

説明をありがとう。 – Dani

関連する問題