У меня есть эти 4 таблицы:
![enter image description here](https://i.stack.imgur.com/RW10P.png)
Этот запрос
var query = db.Authors
.Where(x=> x.ItemAuthors
.Any(z=> z.Item.CategoryItems
.Any(b=> b.categoryID == 10)))
.Select(ci=> new
{
authorText = string.Format("{0} ({1})", ci.text,
ci.ItemAuthors.Count()),
authorId = ci.authorID
});
Заполняет раскрывающийся список авторов, который работает, как и ожидалось. Проблема заключается в том, что когда я пытаюсь подсчитать количество элементов, назначенных каждому автору, он учитывает каждый элемент, который автор имеет во всей таблице элементов.
Так, например, если у автора одной книги всего 10 книг, но в приведенном выше запросе отображаются только две из этих книг, я все равно получаю счет за 10 книг. Когда я связываю тот же запрос с элементом управления, я получаю правильные данные, это просто операция подсчета, которая не будет работать правильно.
Чтобы повторить, я связал его с сеткой, и я вижу только одну книгу на автора, а не все книги, которые автор написал. Похоже, мой запрос должен быть правильным.
Обновление: @ Джон Скит, я не смог использовать оператор let
, так как я условно строю свой запрос. Я решил свою проблему, используя оригинальный запрос, чтобы получить количество. Вот как я изменил свой оригинальный синтаксис Count()
:
var query = authors2.Select(x => new
{
authorText = string.Format("{0} ({1})",x.text, x.ItemAuthors
.Where(qq=> qq.Item.CategoryItems
.Any(xt=> xt.categoryID == 10))
.Count()),
authorId = x.authorID
});