我这两天了。我不太擅长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 .... ????
答案 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;