【发布时间】:2017-03-08 15:55:40
【问题描述】:
我正在尝试对联系人列表运行查询并使用给定的字符串过滤器过滤它们。代码如下:
var query = Session.QueryOver<CrmContact>()
.Where(x => x.Account.ID == account.ID && x.IsActive && x.IsContact);
query.And(Restrictions.Disjunction()
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.FirstName), filtString, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.LastName), filtString, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.Email), filtString, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.Company), filtString))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.Phone.Substring(0, 3)), filtString, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.Phone.Substring(3, 3)), filtString, MatchMode.Anywhere))
.Add(Restrictions.InsensitiveLike(Projections.Property<CrmContact>(c => c.Phone.Substring(6, 4)), filtString, MatchMode.Anywhere)));
但是,我遇到了最后 3 条语句的问题,因为在运行它们时出现“找不到方法子字符串”错误。在过滤器是电话号码/电话号码的一部分的情况下,我正在使用子字符串尝试匹配电话号码的单独部分(例如,“123”将匹配“1234567890”但不匹配“0123456789”,因为这将跨越两个部分)。
对此的任何帮助将不胜感激,谢谢。
【问题讨论】:
-
如果您不能使用
StartsWith、EndsWith或Contains,您可能需要一个自定义函数来为您将方法调用适配为sql。例如:weblogs.asp.net/ricardoperes/… -
检查 IDE 中的数据类型等;在任何情况下,您都需要提供更多信息才能提供适当的解决方案
标签: c# mysql nhibernate