【问题标题】:Convert this SQL to lambda for Code-First EF将此 SQL 转换为 lambda 以用于 Code-First EF
【发布时间】:2013-01-23 17:33:40
【问题描述】:

我有这个 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 领域......提前谢谢你。

【问题讨论】:

  • 为什么有人会“避开”.Net?
  • 是否需要使用EF?如果您对 sql 感到满意,请直接使用它。
  • @MikeSW -- 这是管理层所希望的,因为它与团队构建其他项目的方式一致。我对 EF 很陌生,所以这对我来说是一个挑战......
  • @HighCore -- 我是一名资深的 PHP 开发人员,直到最近,我还不想“换帽子”
  • @Steve 欢迎来到光明的一面 =)。您会发现 C# 比 5 年前要好得多。它实际上比现在存在的任何东西都要好

标签: c# .net entity-framework asp.net-mvc-4 lambda


【解决方案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]
             });

【讨论】:

    【解决方案2】:

    对于这个特定的查询,我个人更喜欢写成没有 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();
    

    【讨论】:

      【解决方案3】:

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

      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())
      

      似乎比我预期的要复杂一些,但解决方案有效。不过,肯定有比这更好的方法......

      【讨论】:

        猜你喜欢
        • 2012-06-30
        • 1970-01-01
        • 2013-04-17
        • 2023-03-17
        • 2017-01-29
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多