2017-12-03 9 views
-1

私は非常に簡単なことをしようとしています。 データベースにlinqを使用して照会したいテーブルが2つあります。 本の表、およびGenreTypesの表このクエリの結果は私のWeb APIに送られます。私は、APIを構築するためにBooksChartクラスに保存したいグループ分けの結果Linqで結合とグループ化を使用する

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; 
} 

「N」:ここでは

は、コードスニペットです。

このコードはコンパイルされていません。

以前は、BooksとGenreTypeに分かれたBooksの1つのテーブルのみを照会していました。

書籍た照会のための私の前の作業コード:

var results = _dbcontext 
    .Books 
    .GroupBy(x => x.GenreType) 
    .Select(z => new BooksPieChart 
    { 
     category_name = z.Key, 
     value = z.Count() 
     }).ToList(); 

     return results; 

EDIT

私はSQLで達成したいことは以下の通りです:

select count(*), g.Name 
from books b, GenreTypes g 
where b.GenreTypeId = g.Id 
group by g.Name; 
+0

コンパイルしていませんか?コンパイルエラーとは何ですか?また、なぜそのテーブルのデータを使用していない場合は、テーブルを結合する?確かにそれはあなたが欲しいものですか? –

+2

@GiladGreenがあなたに正しく答えてくれました。しかし、サイドノートに。 'Books'と' GenreTypes'の間のdbcontextに関係がないのはなぜですか?それは物事をはるかに簡単にする – Rabbi

答えて

2

次の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の宣言です。

サイトはノート:

  • @Rabbiが正しくnavigation propertiesの定義を検討し、あなたがEFを使用しているので、コメントしたよう。クエリがより簡単になります。
  • サイドノートでは、SQLのために - fromで複数のテーブルの代わりにjoinsを使用して検討してください。INNER JOIN ON vs WHERE clause
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 =>にはまったく必要ありません。

関連する問題