У меня есть этот запрос, который делает то, что я хочу, чтобы вернуть true, если какой-либо из материалов сопоставим в списке групп материалов.Нужна помощь по несколько сложному запросу LINQ
mgroup.MaterialGroups.Select(x => x.Materials
.Any(m => Convert.ToBoolean(m.Comparable)))
.Any(x => x.Equals(true))
Что я хочу добавить к этому запросу, так это включить этот.
mgroup.Materials.Any(m => Convert.ToBoolean(m.Comparable));
Как объединить группу и ее материальные группы в запросе, чтобы я мог выбрать оба их материала? Благодарю.
EDIT - После борьбы с LINQ на некоторое время я сломалась и просто комбинироваться
mgroup.Materials.Any(m => Convert.ToBoolean(m.Comparable) ||
mgroup.MaterialGroups.Select(x => x.Materials
.Any(c => Convert.ToBoolean(c.Comparable)))
.Any(x => x.Equals(true)))
Он работает, как ожидалось, но это ужасно долго и она встроена в целях Asp.net MVC для делает вещи даже хуже. Если кто-то может упростить это, это будет потрясающе.
PS- Если вы задаетесь вопросом, почему я добавил дополнительный .any (х => x.Equals (истина), в конце концов, это потому, что без него запрос возвращает IEnumerable из BOOLS вместо BOOL.
Спасибо, но, к сожалению, это возвращает только true, если группа mgroup.MaterialGroup имеет сопоставимый материал, но не возвращает true, если у самой группы есть сопоставимый материал. Второй запрос, который я опубликовал, работает только для последнего, и первый, который я опубликовал только работает для первого. Вот почему я пытаюсь объединить их в одно утверждение, если это возможно. – Smith
@ Смит Хорошо, теперь я понимаю, будет ли новый код работать? –
Да, это действительно работает. Это не тривиальный запрос? Или, может быть, я t не достаточно LINQ. lol На ваш взгляд, что лучше использовать в представлении? Неправильно ли объявлять IEnumerable только для использования в качестве условия? – Smith