2011-11-17 21 views
1

我有IQuerable<MyEntity>和過濾器(條件列表),我想適用於我的查詢。Linq - NHibernate。如何將ORQ運算符中的LINQ條件組合在一起。 IQuerable.Concat替代

示意我想的樣子

       //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)。

但是,我不能在第一個過濾器組,然後是第2組和concat結果執行,因爲在應用我的過濾器之後,我必須使用IQuarable執行一些操作。

我試圖創建queryes和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

您可以使用PredicateBuilder來做到這一點;將條件與PredicateBuilder.Or方法結合,並將結果條件傳遞給Where方法。