У меня есть IQuerable<MyEntity>
и фильтры (список условий), которые я хочу применить к моему запросу.
Схематически я хочу получить вид
//First filter group // Second filter group
QUERY = from MYTABLE where ( Name = "User" and Age = 19 ) OR ( Name = "Alex", and Age > 20 )
query = (query.Where(x => x.Name == value)
.Where(x => x.Age == value)
.Where(x => x.Post == value))
OR (
(query.Where(x => x.Name == value)
.Where(x => x.RegistrationDate == value))
Мне нужно создать IQuerable
, который будет содержать результаты первой и второй группы фильтров (IQuerable
).
Но я не могу выполнить сначала 1-ю группу фильтров, затем 2-ю группу и результаты конкатов, потому что после применения моих фильтров я должен выполнить несколько операций с IQuarable
.
Я пытался создать запросы и query.Concat()
с помощью main, но NHibernate
не поддерживает этот метод
public static IQueryable<IDevice> ApplyGroups(this IQueryable<IDevice> query, IList<ITerminalGroup> groups)
{
foreach (ITerminalGroup group in groups)
{
IQueryable<IDevice> groupQuery = query.AsQueryable();
// apply to groupQuery conditions
groupQuery = groupQuery.ApplyGroup(group);
query = query.Concat(groupQuery);
}
return query;
}
static IQueryable<IDevice> ApplyGroup(this IQueryable<IDevice> query, ITerminalGroup group)
{
foreach (ITermGroupCondition condition in group.Conditions)
{
query = query.Where(x => x.SpecialAttributes.Any(sa => x.Id == condition.AttribId && sa.AttribValue.Equals(condition.Value)));
}
return query;
}
Количество условий может отличаться, я не знаю заранее
Как объединить условия LINQ в группе с оператором ИЛИ?