0

私はこのSQLを持っています、それは望ましい結果を生み出します:

select * from Categories as c
inner join Questions as q on c.Id = q.CategoryId
inner join Surveys as s on s.Id = q.SurveyId
where s.RoleId = 2

ラムダ式に変換したいと思います。

使い方:

  • ユーザーの役割ごとに1つの調査が存在します
  • 調査には質問が含まれています
  • 質問のセットは単一のカテゴリに属します

調査全体を引き出し、Category.Questionsなど(ループはすでに構築されています)で結果を確認しようとしています。

5年以上の回避の後、.NETシーンに戻ろうとしているので、これに関する助けをいただければ幸いです...よろしくお願いします。

4

3 に答える 3

1

LINQ の場合は次のようになります。

var query = (from c in dataContext.Categories
                  join q in dataContext.Questions on q.CategoryId = c.Id
                  join s in dataContext.Surveys on q.SurveyId = s.Id
             where c.RoleId = 5
             select new
             {
                [Your Fields]
             });
于 2013-01-23T17:39:12.320 に答える
0

この特定のクエリでは、ランバダ式を使用せずにLINQとして記述したほうがよいでしょう。

var query=(from c in db.Categories  from q in Questions from n in Surveys where c.Id ==
q.CategoryId && q.SurveyId==n.Id && n..RoleId == 2).ToList();
于 2013-01-23T17:41:48.863 に答える
0

以下を使用してこれを解決しました:

List<Question> questions = db.questions.Where(q => q.Survey.RoleId == iroleId).ToList();

そして、ビュー内で結果セットを次のようにフィルタリングしました。

foreach (Tracker.Models.Category category in Model.Select(x => x.Category).Distinct().ToList())
{
  ...
  foreach (Tracker.Models.Question question in Model.Where(x => x.Survey.RoleId == ViewBag.UserRoleId && x.CategoryId == catLoop.Id).ToList())

予想よりも少し面倒ですが、解決策は機能します。これよりも良い方法があるはずですが...

于 2013-01-23T19:11:43.237 に答える