C# NHibernate-连接2个表并搜索
我正在尝试为NHibernate创建SQL查询: SQL将如下所示:C# NHibernate-连接2个表并搜索,c#,sql,nhibernate,C#,Sql,Nhibernate,我正在尝试为NHibernate创建SQL查询: SQL将如下所示: Select p.* From PPoint p Inner join PPFile f on p.ImportID = f.ImportID where p.Name like '%a%' Or p.Code like '%a%' Or f.FileName like '%a%' 找不到一个像样的例子,甚至听起来很容易 目前我有: var pointList = session .C
Select p.*
From PPoint p
Inner join PPFile f on p.ImportID = f.ImportID
where p.Name like '%a%'
Or p.Code like '%a%'
Or f.FileName like '%a%'
找不到一个像样的例子,甚至听起来很容易
目前我有:
var pointList = session
.CreateCriteria(typeof(PPoint))
.Add(Restrictions.Or(Restrictions.Or(Restrictions.Or(Restrictions.Or
Restrictions.Like("Name", "%" + search + "%"),
Restrictions.Like("Code", "%" + search + "%")),
Restrictions.Like("Test", "%" + search + "%")),
Restrictions.Like("Test2", "%" + search + "%")),
Restrictions.Like("FileName", "%" + search + "%")))
.List<PPoint>();
var pointList=会话
.CreateCriteria(类型(点))
.添加(限制)或(限制)或(限制)
限制。例如(“名称”、“百分比”+搜索+“%”),
限制。例如(“代码”、“百分比”+搜索+“%”),
限制。例如(“测试”、“百分比”+搜索+“%”),
限制。例如(“Test2”、“%”+搜索+“%”),
限制。例如(“文件名”、“%”+搜索+“%”)
.List();
NHibernate版本2.2已找到解决方案:
var pointList = session
.CreateCriteria(typeof(PPoint), "p")
.CreateAlias("ImportFile", "f", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Disjunction()
.Add(Restrictions.Like("p.Name", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Code", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Test1", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Test2", search, MatchMode.Anywhere))
.Add(Restrictions.Like("f.FileName", search, MatchMode.Anywhere)))
.List<PPoint>();
var pointList=会话
.CreateCriteria(类型(点),“p”)
.CreateAlias(“ImportFile”、“f”、NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(限制.析取()
.Add(限制,如(“p.Name”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Code”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Test1”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Test2”、搜索、匹配模式、任意位置))
.Add(限制,如(“f.FileName”、搜索、匹配模式.Anywhere)))
.List();
主要是描述映射文件中的关系:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="AAA.Data"
namespace="AAA.Data.Domain">
<class name="PPoint" lazy="true">
<id name="PPointID" />
<!--<property name="ImportID" />-->
<many-to-one name="ImportFile" column="ImportID" not-null="true" cascade="all-delete-orphan" />
<property name="Code" />
<property name="Test1" />
...
</class>
...
找到了解决方案:
var pointList = session
.CreateCriteria(typeof(PPoint), "p")
.CreateAlias("ImportFile", "f", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Disjunction()
.Add(Restrictions.Like("p.Name", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Code", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Test1", search, MatchMode.Anywhere))
.Add(Restrictions.Like("p.Test2", search, MatchMode.Anywhere))
.Add(Restrictions.Like("f.FileName", search, MatchMode.Anywhere)))
.List<PPoint>();
var pointList=会话
.CreateCriteria(类型(点),“p”)
.CreateAlias(“ImportFile”、“f”、NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(限制.析取()
.Add(限制,如(“p.Name”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Code”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Test1”、搜索、匹配模式、任意位置))
.Add(限制,如(“p.Test2”、搜索、匹配模式、任意位置))
.Add(限制,如(“f.FileName”、搜索、匹配模式.Anywhere)))
.List();
主要是描述映射文件中的关系:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="AAA.Data"
namespace="AAA.Data.Domain">
<class name="PPoint" lazy="true">
<id name="PPointID" />
<!--<property name="ImportID" />-->
<many-to-one name="ImportFile" column="ImportID" not-null="true" cascade="all-delete-orphan" />
<property name="Code" />
<property name="Test1" />
...
</class>
...
您是否使用nHibernate 3.0或更高版本?这种查询非常适合这种情况
string searchString = string.Format("%{0}%", search);
PPoint ppointAlias = null;
PPFile ppFileAlias = null;
var pointList = session.QueryOver<PPoint>(() => ppointAlias)
.JoinQueryOver<PPFile>(ppPoint => ppPoint.ImportFile, () => ppFileAlias)
.Where(
Restrictions.On(() => ppointAlias.Name).IsLike(searchString))
||
Restrictions.On(() => ppointAlias.Code).IsLike(searchString))
||
Restrictions.On(() => ppFileAlias.FileName).IsLike(searchString))
)
.List();
string searchString=string.Format(“%{0}%”,search);
PPoint ppointAlias=null;
PPFile ppFileAlias=null;
var pointList=session.QueryOver(()=>ppointAlias)
.JoinQueryOver(ppPoint=>ppPoint.ImportFile,()=>ppFileAlias)
.在哪里(
限制(()=>ppointAlias.Name).IsLike(searchString))
||
限制(()=>ppointAlias.Code).IsLike(searchString))
||
限制(()=>ppFileAlias.FileName).IsLike(searchString))
)
.List();
您是否使用nHibernate 3.0或更高版本?这种查询非常适合这种情况
string searchString = string.Format("%{0}%", search);
PPoint ppointAlias = null;
PPFile ppFileAlias = null;
var pointList = session.QueryOver<PPoint>(() => ppointAlias)
.JoinQueryOver<PPFile>(ppPoint => ppPoint.ImportFile, () => ppFileAlias)
.Where(
Restrictions.On(() => ppointAlias.Name).IsLike(searchString))
||
Restrictions.On(() => ppointAlias.Code).IsLike(searchString))
||
Restrictions.On(() => ppFileAlias.FileName).IsLike(searchString))
)
.List();
string searchString=string.Format(“%{0}%”,search);
PPoint ppointAlias=null;
PPFile ppFileAlias=null;
var pointList=session.QueryOver(()=>ppointAlias)
.JoinQueryOver(ppPoint=>ppPoint.ImportFile,()=>ppFileAlias)
.在哪里(
限制(()=>ppointAlias.Name).IsLike(searchString))
||
限制(()=>ppointAlias.Code).IsLike(searchString))
||
限制(()=>ppFileAlias.FileName).IsLike(searchString))
)
.List();
我使用的是NHibernate 2.2版本。我使用的是NHibernate 2.2版本。很酷,我们现在有了使用QueryOver和not解决相同问题的示例。它让我们深入了解QueryOver api是如何发展的。很酷,我们现在有了使用QueryOver和not解决相同问题的示例。它让我们了解QueryOverAPI是如何演变的。