1

私が翻訳しようとしているクエリは次のとおりです。

SELECT 
    MIN(BookCopies.id) as id, Books.title, Authors.name, Publishers.name
FROM 
    dbo.BookCopies
INNER JOIN 
    Books ON BookCopies.bookId = Books.id
INNER JOIN 
    Authors ON Books.authorId = Authors.id
INNER JOIN 
    Publishers ON BookCopies.publisherId = Publishers.id
WHERE 
    BookCopies.sold = 0 
GROUP BY 
    Books.title, Authors.name, Publishers.name;

私はこの問題を 3 時間解決しようとしていますが、できません... :/

Linq コード:

var query = (from bc in db.BookCopies
            join b in db.Books on bc.bookId equals b.id
            join a in db.Authors on b.authorId equals a.id
            join p in db.Publishers on bc.publisherId equals p.id
            where (bc.sold == false && bc.price != null && bc.price != 0)
            group bc by new {b.title, author = a.name, publisher = p.name} into gr
            select new {gr.Key.title, gr.Key.author, gr.Key.publisher});

しかし、それは正しくありません。

4

1 に答える 1

2

ここでのトリックは、後でグループ化される中間データ型 (行) に結合した結果を選択することです。

from bc in db.BookCopies
join b in db.Books on bc.bookId equals b.id
join a in db.Authors on b.authorId equals a.id
join p in db.Publishers on bc.publisherId equals p.id
where bc.sold == 0
select new { bc.id, b.title, author = a.name, publisher = p.name } into row
group row by new { row.title, row.author, row.publisher } into g
select new {
   id = g.Min(x => x.id),
   g.Key.title,
   g.Key.author,
   g.Key.publisher
}

これにより、探しているのとまったく同じクエリが生成されます。

于 2013-09-26T10:33:33.840 に答える