Проблемы с преобразованием немного TSQL в LINQ для сущностей - PullRequest
2 голосов
/ 12 августа 2010

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

SELECT
    *
FROM
    Publishers p
    INNER JOIN Authors a
        ON p.AuthorID = a.AuthorID
    INNER JOIN Books b
        ON a.BookID = b.BookID
WHERE
    p.PublisherName = 'Foo'
ORDER BY
    b.PublicationDate DESC

Я попытался переписать его так:

var query =
    from publisher in ctx.Publishers
    from author in publisher.Authors
    from books in author.Books
    ...

, но получил следующую ошибку:

    Error   1   An expression of type 'Models.Books' is not allowed in a 
    subsequent from clause in a query expression with source type
    'System.Linq.IQueryable<AnonymousType#1>'.  Type inference failed in the
    call to 'SelectMany'.

Я могу переписать LINQ, чтобы он заработал, просто присоединив таблицы, как в SQL, но я думал, что смогу добиться того, чего хочу от их отношений - яПросто немного запутался, почему я могу получить издателя. Авторы, но не авторы. Книги.

Ответы [ 2 ]

0 голосов
/ 12 сентября 2012

Попробуйте это ...

var result = (from pItem in ctx.Publishers
join aItem in ctx.Authors on pItem.AuthorId equals aItem.AuthorId
join bItem in ctx.Books on pItem.BookId equals bItem.BookId
where pItem.PublisherName== "Foo"
select new {
// Fields you want to select
 }
).ToList();

Я не знаю точную взаимосвязь таблиц, но вы можете понять из этого.

0 голосов
/ 01 октября 2010

Убедитесь, что у вас есть отношения в вашей БД от авторов к книгам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...