1

ここの初心者からのLinqメソッド構文のビットなので、誰でも伝えられる洞察に感謝します。必要なものは単純に思えますが、ぐるぐる回っています。2 つのテーブルと関連付けがあります (基本的に、2 つのフィールドしかないジャンクション テーブル)。私はSOに関する多くの投稿を経験しましたが、私はそれを理解していません. イライラします。わかりました。EF4 を使用して、Reports と Roles と、ReportId と RoleId フィールド、両方の整数フィールドを持つジャンクション テーブルである Roles と呼ばれるレポートのナビゲーション プロパティがあります。UserId を使用して Roles テーブルから関連するすべてのロールを取得し、それらのロールを使用してジャンクション テーブルから関連するレポートを取得し、Reports からレポートの名前を取得します。

LinqPad を試してみましたが、LinqPad に貼り付けても、ラムダ メソッド構文で生成​​されるものは機能しません。

SQL クエリ:

select Reports.ReportName 
 from Reports 
 inner join UserRoles on Reports.ReportId = UserRoles.ReportId 
 inner join Roles on Roles.RoleId = UserRoles.RoleId 
 where UserRoles.UserId == userId

これまでのコード:

Reports.Select(a => a.Roles.Where(t => t.UserRoles.Select(u => u.UserId == userId)));
4

2 に答える 2

0

この場合、このクエリ構文の方がはるかに優れていると思います。

var query = from report in db.Reports
            join ur in db.UserRoles on report.ReportId equals ur.ReportId
            join role in db.Roles on ur.RoleId equals role.RoleId
            where ur.UserId == userId
            select report.ReportName;
于 2013-01-28T06:27:39.137 に答える