将Linq表达式转换为C#EF

时间:2015-11-18 11:35:54

标签: c# entity-framework linq

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

我在LINQPad中删除了一个查询(通过阅读文章和教程),它最终返回结果。

现在我需要帮助将其转换为C#代码。我有谷歌搜索翻译网站,并找到了很多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 .... ????

2 个答案:

答案 0 :(得分:1)

正如评论中所述,我建议您的_mlsDashboardNavRepository仅引用DashboardNavigations,因为您说您仅使用_mlsDashboardNavRepository.Tables检索主要记录;您的DashboardNavigations参考在哪里?要执行查询,您需要一个引用(所有)数据库表的上下文。下面是使用 a 数据库上下文的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();

答案 1 :(得分:0)

所以我在这里发帖给其他人。它不是我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;