我有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-s过滤器组执行,然后执行第2个组和concat结果,因为在应用我的过滤器后,我必须使用IQuarable
执行一些操作。
我尝试使用main创建查询和query.Concat()
,但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条件与OR运算符组合?