我试图做一些非常简单的事情。 我在数据库中有两个表,我想使用linq查询。 书籍表和GenreTypes表。此查询的结果将转到我的网络Api。
以下是代码段:
public List<BooksChart> GetBooksChart()
{
var results = from b in _dbcontext.Books
join g in _dbcontext.GenreTypes
on b.GenreTypeId equals g.Id
group g by g.Name into n
select (z => new BooksChart
{
category_name = n.Key,
value = n.Count()
}).ToList();
return results;
}
public class BooksChart
{
public string category_name;
public int value;
}
分组的结果&#34; n&#34;我想将它们存储在BooksChart类中以构建Api。
此代码未编译。
以前,我只查询一个书籍表,我将其分为书籍和流派类型。
我以前查询图书的工作代码是:
var results = _dbcontext
.Books
.GroupBy(x => x.GenreType)
.Select(z => new BooksPieChart
{
category_name = z.Key,
value = z.Count()
}).ToList();
return results;
修改的
我想在SQL中实现的目标如下:
select count(*), g.Name
from books b, GenreTypes g
where b.GenreTypeId = g.Id
group by g.Name;
答案 0 :(得分:2)
您正在混合查询和方法的两个语法选项。对于查询语法,您需要执行投影(select
),如下所示:
return (from b in _dbcontext.Books
join g in _dbcontext.GenreTypes on b.GenreTypeId equals g.Id
group g by g.Name into n
select new BooksChart {
category_name = n.Key,
value = n.Count()
}).ToList();
(z =>....)
的格式是传递给Select
方法的labmda的声明。
网站说明:
joins
代替from
中的多个表:INNER JOIN ON vs WHERE clause 答案 1 :(得分:2)
括号必须包围整个查询,如下所示:
var results = (from b in _dbcontext.Books
join g in _dbcontext.GenreTypes
on b.GenreTypeId equals g.Id
group g by g.Name into n
select new BooksChart
{
category_name = n.Key,
value = n.Count()
}).ToList();
编译错误是由(z =>
引起的,根本不需要。