c# - ラムダ式 - linq any



エンティティフレームワークのIDで要素のリストを取得する (2)

このような何かは、user.Rolesがintのリストである場合にはうまくいくはずです:

var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));

SQLでは、これを「SELECT WHERE IN(x、y、z ...)」に変換します。

https://src-bin.com

別のリストにあるすべての要素をIDで取得するにはどうすればよいですか? たとえば、 リストの役割があります。 このリストにあるデータベースからすべての役割をIDで取得したいと考えています。

私はコードファーストを使用しています。

私はこれをして、それはエラーを投げた:

var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId));

RoleIdはint型です。

エラー:

型 'SampleMVC.Domain.Role'の定数値を作成できません。 このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。


Answer #1

ローカル・リストをリモート・データと組み合わせることはできません。データが(クライアント上の)別のものであるため、データベースから読み取るものはありません。

私はあなたがやろうとしていることに対してよりよい解決策があるかもしれないと思います。

特定のユーザーに割り当てられているすべての役割を取得しようとしているようです。 その場合、現在のユーザーIDをデータベースに渡し、INNER JOINで割り当てられたロールをフェッチするソリューションを提案します。

あなたのデータベースに応じて、このように見えるかもしれません(あなたが 'UserRoles'というテーブルを通してロールを使ってユーザを接続している場合)

var roles = db.UserRoles.Where(x => x.UserID == <insert id>).Select(x => x.Role)

(もちろん、DBに直接アクセスしてマップしたい場合は、 'Role'のリストを返すストアドプロシージャを作成することもできます)。





entity-framework-4.1