将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。。。。????
如注释所述,我建议您的_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;