将SQL查询转换为Nhibernate Criteria

时间:2012-05-12 04:14:24

标签: nhibernate count distinct having

我的SQL查询:

select [CompanyId] 
from dbo.Bussiness_Company
where [BussinessId] in (11,12,13)
group by [CompanyId]
having COUNT(distinct [BussinessId])=3

说明: 我有一张表 Bussiness_Company 表:

Bussiness_Company

ID *

BussinessId

CompanyId

我的数据:

标识--------- BussinessId ------------ CompanyId

1 ---------- 10 --------------------- 100

2 ---------- 11 --------------------- 100

3 ---------- 12 --------------------- 100

Resaul查询

CompanyId

100

  • 感谢任何肝脏!

Sloved:

这是我的代码:

DetachedCriteria detachedCriteria = DetachedCriteria.For<BussinessCompany>();
 detachedCriteria.SetProjection(Projections.Property("Company"));
 detachedCriteria.SetProjection(Projections.GroupProperty("Company"));
 Disjunction disjunction = Restrictions.Disjunction();
 foreach (Bussiness bussiness in list)
 {
   disjunction.Add(Restrictions.Eq("Bussiness", bussiness ));
 }                  detachedCriteria.Add(disjunction).Add(Restrictions.Eq(Projections.CountDistinct<BussinessCompany>(m => m.Bussiness), list.Count));

 IList<Sonomi.Core.BusinessObjects.Bussiness> bussiness =
                    bussinessUnitManager.CreateCriteria().Add(Subqueries.PropertyIn("Id", detachedCriteria)).List
 <Sonomi.Core.BusinessObjects.BussinessUnit>();

 dgrCer.DataSource = bussiness;
 dgrCer.DataBind();

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此类QueryOver代码:

var bussinessIdCount = 3;
var bussinessIds = new[] { 11, 12, 13 };
Bussiness_Company bussinessCompany = null;
session.QueryOver(() => bussinessCompany)
  .WhereRestrictionOn(() => bussinessCompany.BussinessId).IsIn(bussinessIds)
  .Select(Projections.Group(Projections.Property(() => bussinessCompany.CompanyId)))
  .Where(Restrictions.Gt(Projections.CountDistinct(() => bussinessCompany.BussinessId), bussinessIdCount));
相关问题