【问题标题】:NHibernate selecting from a many to many collection and use 'or' between different tablesNHibernate 从多对多集合中选择并在不同表之间使用“或”
【发布时间】:2013-05-10 08:21:15
【问题描述】:

我希望 NHibernate 生成以下 SQL,但我对下面的代码感到困惑

SELECT * FROM [TCRM_Client] where (
 [ID] in (  
  SELECT B.ClientID FROM TCRM_Contact A,R_Client_Contact B
  WHERE A.ID = B.ContactID
  AND (
        A.Mobile LIKE 'KEYWORD%' OR A.Tel LIKE 'KEYWORD%'
      )  
  )
 OR Name LIKE '%KEYWORD%'
)



private void AddCriterion<T>(IQueryOver<T, T> query)
         where T : Client
{
    if (!String.IsNullOrEmpty(keyWord))
    {
        var r1 = (Restrictions.On<Client>(x => x.Name)
          .IsLike("%" + keyWord + "%", MatchMode.Start));
        var profilequery = query.Left.JoinQueryOver<ClientContact>
          (o => o.ClientContactList)
          .Left.JoinQueryOver<Contact>(x => x.Contact).Where(o => o.ID != Guid.Empty);
        var r2 = Restrictions.On<Contact>(x => x.Tel)
          .IsLike("%" + keyWord + "%", MatchMode.Start) || 
          Restrictions.On<Contact>(x => x.Mobile)
          .IsLike("%" + keyWord + "%",MatchMode.Start);

        //A failed attempt
        //query.Add(r1)
        //profilequery.Add(r2);


        //Another failed attempt
        //query.RootCriteria.Add(Restrictions.Or(r1,r2));
    }
}

这些代码不能工作,因为它目前没有在不同的表之间使用关键字'OR'。

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:
      SELECT B.ClientID FROM TCRM_Contact A,R_Client_Contact B
      WHERE A.ID = B.ContactID and A.Mobile LIKE 'KEYWORD%'
      union all
      SELECT B.ClientID FROM TCRM_Contact A,R_Client_Contact B
      WHERE A.ID = B.ContactID and A.Tel LIKE 'KEYWORD%'
    

    您可以尝试使用它来代替 .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      相关资源
      最近更新 更多