将Linq表达式转换为C#EF

本文关键字:C#EF 转换 表达式 Linq | 更新日期: 2023-09-27 18:22:19

我已经在这两天了。我不太擅长林克的表达,所以请原谅我的简单。我有两个相关的表,在TSQL中编写联接会很容易,但我使用的是EntityFramework和Linq。

我在LINQPad中破解了一个查询(通过阅读文章和教程),它终于按照我的意愿返回了结果。

现在我需要帮助将其转换为C#代码。我在谷歌上搜索翻译网站,找到了很多Linq的SQL,但没有一个适合我正在做的事情。。。。很可能是因为我甚至不知道我使用的是正确的搜索词。

我的LINQPad代码是这样的:

DashboardNavigations
.OrderBy(x => x.Id)
.Select(x => new 
{
    x.Id,
    x.Name,
    x.Description,
    x.ImageUrl,
    SubDash = SubDashNavs 
        .Where(s => s.DashId == x.Id)
        .Select(y => new { y.Id, y.Name, y.Description })
})

我习惯于将SIMPLE Linq表达式编写成这样的实体框架:

var query = _mlsDashboardNavRepository.Table;
query = query.OrderBy(c => c.Id);
var dashnav = query.ToList();

正如你所看到的,我有主记录返回,但无法正确加入。

我需要帮助的是将代码从LINQPad转换为C#/EF/LINQ转换为SQL。。。。????

将Linq表达式转换为C#EF

如注释所述,我建议您的_mlsDashboardNavRepository只引用DashboardNavigations,因为您说您只使用_mlsDashboardNavRepository.Tables检索主记录;您的DashboardNavigations参考资料在哪里?要执行查询,您需要一个引用(所有)数据库表的上下文。下面是使用数据库上下文的LINQ格式的代码,如果您习惯了SQL语法,这可能会更容易。

var query = (from d in context.DashboardNavigations
             join s in context.SubDashNavs on d.Id equals s.Id
             orderby d.Id ascending
             select new 
             { 
                d.Id, 
                d.Name, 
                d.Description,
                d.ImageUrl,
                SubDash = s 
             });
var dashNavs = query.ToList();

所以我在这里为其他人发布这篇文章。这不是我OP的一部分,NLindbom有OP的答案,所以他得到了荣誉。然而,在弄清楚我的问题后,我想把它投影出来

我的模型类基本上是这样的:

public class DashboardNavigation()
{
  public int Id {get; set;}
  public string Name {get; set;}
  .....etc.....
  public List<SubNav> SubDashNav {get; set;}
}
public class SubNav()
{
  ....properties....
}

并且该LINQ将记录正确地投影到对象中。

         var query = _mlsDashboardNavRepository.Table
        .OrderBy(x => x.Id)
        .Select(x => new
        {
            Id = x.Id,
            Name = x.Name,
            Description = x.Description,
            ImageUrl = x.ImageUrl,
            SubDashNav = _mlsSubDashNav.Table
                .Where(s => s.DashId == x.Id)
        }).ToList().Select(q => new MLS_DashboardNavigation()
                            {
                                Id = q.Id,
                                Name = q.Name,
                                Description = q.Description,
                                ImageUrl = q.ImageUrl,
                                SubDashNav = q.SubDashNav.ToList()
                            }).ToList();
        return query;