2013-11-27 4 views
1

안녕하세요. 다른 게시물을 보았습니다. 이 게시물이 중복되면 미리 사과드립니다.안녕하세요, IQUERYOVER의 복수 OR 절

select * from ApiData where BrandID = 'SOUPBRAND' and Culture = 'de-de' 
or 
(BrandID = 'SOUPBRAND' and Culture = 'pt-br' and EntityType = 'contactus') 
or 
(BrandID = 'examplefoods') 

무엇 NHibernate에 쿼리과 같습니다

SQL 쿼리는 다음과 같이인가?

이것은 내가 지금까지 무엇을 가지고 :

var mainQuery = _session.QueryOver<ApiData>(); 

      foreach (var brandPermission in permissions) 
      { 
       var query = _session.QueryOver<ApiData>(); 
       if (!string.IsNullOrEmpty(brandPermission.Culture) && !string.IsNullOrEmpty(brandPermission.Publication)) 
       { 
        query = query.Where(a => (a.Culture == brandPermission.Culture) 
              && (a.Publication == brandPermission.Publication)); //FetchEntries(apiUser.DefaultCulture, apiUser.Publication); 
       } 
       else if (!string.IsNullOrEmpty(brandPermission.Culture)) 
       { 
        query = query.Where(a => (a.Culture == brandPermission.Culture)); //FetchEntries(apiUser.DefaultCulture); 
       } 

       query = query.Where(a => a.BrandId == brandPermission.BrandId); 

//Here I would like to add 
// mainQuery.AddORRestriction(query); 
} 

그냥 그것을 달성하는 방법을 잘 모릅니다. 링크를 보았다 : http://www.methodicmadness.com/2012/04/extending-queryover-with-or.html 그러나 didnt 도움.

감사합니다.

답변

5

덕분에 : https://www.google.com/url?q=http://ayende.com/blog/4023/nhibernate-queries-examples&usd=2&usg=AFQjCNG43MDXKhjZ9LrCVSldeZuruBSdQQ 과에 :

var mainQuery = _session.QueryOver<ApiData>(); 

    var holdOr = Restrictions.Disjunction(); 
    foreach (var brandPermission in permissions) 
    { 
     var query = _session.QueryOver<ApiData>(); 
     var holdAnd = Restrictions.Conjunction(); 
     if (!string.IsNullOrEmpty(brandPermission.Culture) && !string.IsNullOrEmpty(brandPermission.Publication)) 
     { 
      holdAnd.Add(Restrictions.Eq("Culture", brandPermission.Culture)); 
      holdAnd.Add(Restrictions.Eq("Publication", brandPermission.Publication)); 
     } 
     else if (!string.IsNullOrEmpty(brandPermission.Culture)) 
     { 
      holdAnd.Add(Restrictions.Eq("Culture", brandPermission.Culture)); 
     } 

     holdAnd.Add(Restrictions.Eq("BrandId", brandPermission.BrandId)); 

     holdOr.Add(holdAnd); 
    } 
    mainQuery.Where(holdOr); 
: https://www.google.com/url?q=https://stackoverflow.com/questions/14478430/c-sharp-nhibernate-multiple-where-conditions-in-session-queryover&usd=2&usg=AFQjCNHRKbQz3EKGqOOh0gSV0LW2taSX-w

나는 다음과 같은 솔루션을 가지고