2013-09-26 7 views
1

запросе я пытаюсь перевести это:Преобразование SQL запрос сервера в LINQ

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

Но это неверно.

+2

Вы пишете код за эти 3 часа? –

+0

Да, это: 'вар запрос = (БЛ в db.BookCopies присоединиться к Ь в db.Books на bc.bookId равно b.id присоединиться к в db.Authors на b.authorId равна a.id присоединиться к р в db.Publishers на bc.publisherId равно p.id где (bc.sold == false && bc.price! = null && bc.price! = 0) группа bc по-новому {b.title, a.name} в gr выберите новый {bc.id, gr.Key.title, gr.Key.name}). Min(); ' – zach

ответ

2

Trick здесь выбор результат присоединения к промежуточному типу данных (строки), которые будут сгруппированы позже:

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 
} 

Это производит точно такой же запрос, который вы ищете.

+1

Наконец-то решил ^^ Большое спасибо! – zach

Смежные вопросы