1) DetachedCriteria
ICriteria query = this.Session.CreateCriteria(typeof(Person));
DetachedCriteria personIds = DetachedCriteria.For(typeof(ServicePerson))
.SetProjection(Projections.Property("PersonId"))
.Add(Restrictions.Eq("IsPrincipal", true));
query.Add(Subqueries.PropertyIn("ID", personIds));
===> 生成的sql:
SELECT count(*) as y0_
FROM Person p
WHERE p.Id in (
SELECT ps.PersonId as y0_
FROM Service_Person ps
WHERE ps.IsPrincipal = 1
)
2) CreateCriteria 会产生 inner join哦 ^_^
ICriteria query = this.Session.CreateCriteria(typeof(Person));
query.CreateCriteria("PersonServices", "sp").Add(Expression.Eq("sp.IsPrincipal", true));
===> 生成的sql:
SELECT count(*)
FROM Person p
inner join Service_Person sp on p.Id = sp.PersonId
WHERE sp.IsPrincipal = 1
3)
<!-- psOTCOrderGetHistory return OrderId [] -->
<sql-query name="psOTCOrderGetHistory">
<![CDATA[
exec dbo.ps_OTCOrder_GetHistory :EstId, :IsGrouped
]]>
</sql-query>
List<long> OrderIds = new List<long>();
IQuery query = this.Session.GetNamedQuery("psOTCOrderGetHistory");
query.SetParameter("EstId", id);
query.SetParameter("IsGrouped", isGrouped);
OrderIds = query.List<long>().ToList<long>();
ICriteria criteria = this.Session.CreateCriteria<OTCOrder>()
.Add(Expression.In("ID",OrderIds));
list = criteria.List<OTCOrder>().ToList<OTCOrder>();
return list;
浙公网安备 33010602011771号