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

我想将其转换为 lambda 表达式。

这个怎么运作:

  • 每个用户角色都存在一个调查
  • 调查包含问题
  • 问题集属于一个类别

我正在尝试拉动整个调查,使用 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

通过使用解决了这个问题:

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 回答
0

对于这个特定的查询,我个人更喜欢写成没有 Lambda 表达式的 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 回答