Я использую Linq и Entity Framework. У меня есть объект Page Entity, имеющий отношение «многие ко многим» к объекту Tag.
Я хочу создать запрос Linq, который извлекает все страницы, соответствующие всем предоставленным тегам (в форме Int64 []).
Я пробовал различные примеры WhereIn и BuildContainsExpression, но ни один из них не работает должным образом.
Сейчас я пытаюсь перебрать все теги и создать список выражений:
foreach (Int64 item in Tags)
{
Expression<Func<Pages, bool>> tagFilter = c => c.Tags.Any(x => x.TagID == item);
exp.Add(tagFilter);
}
Тем не менее, я думаю, что локальная переменная "item" связывается с запросом, потому что он либо использует один тег, либо ни один из них во время выполнения запроса, однако, если я укажу их так:
Expression<Func<Pages, bool>> tagFilter1 = c1 => c1.Tags.Any(x => x.TagID == 70);
exp.Add(tagFilter1);
Expression<Func<Pages, bool>> tagFilter2 = c1 => c1.Tags.Any(x => x.TagID == 130);
exp.Add(tagFilter2);
Expression<Func<Pages, bool>> tagFilter3 = c1 => c1.Tags.Any(x => x.TagID == 77);
exp.Add(tagFilter3);
Используя фактическое число "70", например, он работает как шарм. Я в основном храню выражения в списке и использую LinqKit для And () их.
Есть ли способ сохранить эту динамику?