Linq - NHibernate。如何将组中的LINQ条件与OR运算符组合。 IQuerable.Concat替代方案

时间:2011-11-17 10:09:37

标签: c# sql linq nhibernate

我有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运算符组合?

1 个答案:

答案 0 :(得分:1)

您可以使用PredicateBuilder来做到这一点;将条件与PredicateBuilder.Or方法结合起来,并将结果条件传递给Where方法。