Фильтр таблицы «Включает» в запросе Entity Framework

Это для Entity Framework для .NET 3.5:

У меня есть необходимость запросить таблицу и включить коллекцию из таблицы «многие» одного отношения ко многим. Я пытаюсь отфильтровать эту коллекцию как часть запроса - я довольно новичок в Entity Framework, и я У меня проблемы с его выяснением.

Упрощенный пример: у автора есть Книги, а у Книги есть столбец IsFiction. Мне нужен отфильтрованный список авторов вместе со всеми художественными книгами.

Без фильтра это легко:

var q = from a in db.Authors.Include("Books")
        where a.BirthYear > 1900
        select a;

Я могу фильтровать по факту, что-то вроде:

var fictionBooks = a.Books.Where(b => b.IsFiction);

Но проблема в том, что исходный запрос уже выполнялся и включил эти результаты, что является ненужной обработкой базы данных.

Я могу запросить отдельно, например:

var q = from a in db.Authors where a.BirthYear > 1900 select a;
foreach (var a in q)
{
    var books = from b in db.Books 
                where ((b.Author.Id == a.Id) && (b.IsFiction))
                select b;
}

Но, конечно, это один вызов для каждого автора, которого я также хочу избежать.

Я могу вернуться назад Примерно так:

var allBooks = from b in db.Books.Include("Author")
               where b.IsFiction
               select b;

Но потом я возвращаюсь к исходной проблеме, за исключением теперь на стороне автора, а не на стороне книги.

Должно быть решение, которое охватывает все - я могу сделать это в SQL довольно легко:

Я видел такой HTML-код для атрибута ID:

id="t1:c3"

Может кто-нибудь объяснить это мне? Какова цель двоеточия (: )?

Спасибо.

26
задан Deduplicator 1 February 2015 в 16:28
поделиться

1 ответ

Двоеточия разрешены внутри атрибутов ID, но не имеют особого значения. Их не рекомендуется использовать, потому что они могут иногда вызывать проблемы, например, при использовании с jQuery или CSS, где двоеточие имеет особое значение как псевдоселектор.

28
ответ дан 28 November 2019 в 07:42
поделиться