Исходя из вашего комментария к DaveShaw, я думаю, что вы должны это сделать:
IQueryable<Convention> query = db.Conventions;
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Contains(inputCategory));
}
if (!string.InNullOrWhiteSpace(inputName))
{
query = query.Where(p=> p.Name == inputName);
}
и т. Д.
Теперь, если вы хотите убедиться, что ваша Конвенция имеет хотя бы одну категориювместо этого вы можете использовать .Any ()
if (string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any());
}
или если у него должна быть какая-либо категория с определенным именем
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any(c => c.Name.Contains(inputCategory));
}
Фактический запрос не будет выполнен, пока вы не вызовете ToArray,ToList или ToEnumerable на нем (или любой другой метод, который требует оценки на стороне клиента).Пока вы придерживаетесь чистых вызовов LINQ на объекте Query, вы можете продолжать придерживаться его положений, пока не будете удовлетворены.