【问题标题】:Converting Linq Expression to C# EF将 Linq 表达式转换为 C# EF
【发布时间】:2015-11-18 11:35:54
【问题描述】:

我已经在这两天了。我不太擅长 Linq 表达式,所以请原谅简单。我有两个相关的表,在 TSQL 中编写连接很容易,但我使用的是 Entity Framework 和 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....????

【问题讨论】:

  • 包括你将如何用 SQL 编写它,我将向你展示它的 Linq。
  • 我认为问题在于您需要可以访问 DashboardNavigations 和 SubDashNavs 的 som 上下文。如果我错了,请纠正我,但 _mlsDashboardNavRepository.Table 似乎是一个仅指 DashboardNavigations 的上下文。
  • 使用 LINQ to SQL 和正确的上下文(数据库不是表),您应该能够像在 LINQPad 中一样编写查询。

标签: c# entity-framework linq


【解决方案1】:

如 cmets 所述,我建议您的 _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();

【讨论】:

  • 是的,你是对的。我让它变得更难了。这几乎是我在 LINQPad 中写的内容。
【解决方案2】:

所以我在这里为其他人发布这个。这不是我的 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多