首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将此SQL转换为lambda for Code-First EF

将此SQL转换为lambda for Code-First EF
EN

Stack Overflow用户
提问于 2013-01-23 17:33:40
回答 3查看 361关注 0票数 0

我有这个SQL,它产生所需的结果:

代码语言:javascript
复制
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等(已经构建的循环)遍历结果。

在这方面的任何帮助都将不胜感激,因为我正试图回到.NET的场景后,超过5年的回避.提前谢谢你。

EN

回答 3

Stack Overflow用户

发布于 2013-01-23 17:39:12

如果你的意思是LINQ:

代码语言:javascript
复制
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]
             });
票数 1
EN

Stack Overflow用户

发布于 2013-01-23 17:41:48

对于这个特定的查询,我更喜欢写成没有lambada表达式的LINQ

代码语言:javascript
复制
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();
票数 0
EN

Stack Overflow用户

发布于 2013-01-23 19:11:43

通过使用以下方法解决了这个问题:

代码语言:javascript
复制
List<Question> questions = db.questions.Where(q => q.Survey.RoleId == iroleId).ToList();

并在我的视图中过滤结果集,使用:

代码语言:javascript
复制
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())

看起来比我想象的要混乱一些,但解决方案有效。一定有比这更好的方法,尽管.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14485808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档