2015-05-21 18 views
0

如何使用QueryOver的linq查詢分隔如下ICriteria將用於一般方法?使用QueryOver的查詢分隔

ICriterion c = Restrictions.And(Restrictions.Eq("Name", "Foo"), 
    Restrictions.Or(Restrictions.Gt("Age", 21), Restrictions.Eq("HasCar",true))); 

    IQueryOver<Foo> c = session.QueryOver<Foo>().Where((k => k.Name == "Tiddles" 
        && k => k.Age== 21) || k => k.Age < 21); 

    public static IList<T> All(ICriterion c) 
    { 
     using (var session = NHibernateHelper<T>.OpenSession()) 
     { 
      var CC = session.CreateCriteria(typeof(T)); 
      CC.Add(c); 
      return CC.List<T>(); 
     } 
    } 
+3

你能與您正在試圖完成的任務更加清楚一點? –

+0

我試圖給查詢作爲變量的方法 – Mert

回答

1

相當於第一線,在lambda形式

ICriterion cr = Restrictions.Where<Foo>(k => k.Name == "Foo" && (k.Age > 21 || k.HasCar)); 
1

你可以通過在Expression<Func<T, bool>>這是什麼Where重載之一接受,而不是一個標準。

System.Linq.Expressions.Expression<Func<Foo, bool>> c = k => 
    (k.Name == "Tiddles" && k.Age== 21) || k.Age < 21; 

public static IList<T> All(Expression<Func<T, bool>> expression) 
{ 
    using (var session = NHibernateHelper<T>.OpenSession()) 
    { 
     return session.QueryOver<T>() 
      .Where(expression) 
      .List(); 
    } 
}