我需要使用nHibernate Criteria重新创建查询。这个查询有一个非常难看的where子句。
((t.Disposition_CD)='ac' Or
(t.Disposition_CD)='cc' Or
(t.Disposition_CD)='Co' Or
(t.Disposition_CD)='SF' Or
(t.Disposition_CD)='SC' Or
(t.Disposition_CD)='OR' Or
(t.Disposition_CD)='SV' Or
(t.Disposition_CD)='RI' Or
(t.Disposition_CD)='WN' Or
(t.Disposition_CD)='NC' Or
(t.Disposition_CD)='DN' Or
(t.Disposition_CD)='WT' Or
(t.Disposition_CD)='MA' Or
(t.Disposition_CD)='TO' Or
(t.Disposition_CD)='OC'))
所以,我从这里开始
IList leadList =
session.CreateCriteria(typeof(Lead)).Add(Expression.In("CallDisposition",
new string[] {"AC","CC" })).List();
Lead上的Property是CallDisposition
对象的问题,当我尝试执行此操作时,会出现Unknown entity class: System.String
错误。一个CallDisposition
数组正在寻找它。
基本上我正在寻找的是一个符合原始查询的所有或标准的潜在客户列表。任何建议都有帮助。
答案 0 :(得分:2)
在不知道实体属性的情况下,很难发表评论。
如果CallDisposition属性是具有CallDispostionCode属性的CallDisposition实体,那么您可以执行以下操作:
IList leadList = session.CreateCriteria(typeof(Lead))
.Add(Expression.In("CallDisposition.CallDispostionCode",
new string[] {"AC","CC" })).List();
或者,如果CallDisposition具有Id,您可以将第二个解决方案修改为:
DetachedCriteria criteria = DetachedCriteria.For<CallDisposition>()
.Add(Expression.In("CallDispostionCode", new string[] { "AC", "CC" })
.SetProjection(Projections.Property("CallDisposition.Id"));
IList leadList = session.CreateCriteria(typeof(EmcLead))
.Add(Subqueries.PropertyIn("CallDisposition.Id", criteria)).List();
这只是使用子选择命中的一个数据库。
答案 1 :(得分:1)
首先我做了这个
IList DispList = session.CreateCriteria(typeof(CallDisposition)).Add(Expression.In("CallDispostionCode", new string[] { "AC", "CC" })).List();
接下来是
IList leadList = session.CreateCriteria(typeof(EmcLead)).Add(Expression.In("CallDisposition", DispList)).List();
如果我将CallDispositionCode
存储在Lead
对象中,我就可以直接获得潜在客户并获得CallDispositionCode
。这是一个设计问题。
如果有人有任何建议或意见,我会有兴趣听取。