在nHibernate QueryOver <T>期间无法比较字符串

Cie*_*iel 6 c# nhibernate

我有一个简单的方法来尝试和验证用户登录时,我Fluent nHibernate用于持久性,所以我自然地实现了ISession.QueryOver<T>这项工作.

它看起来如下.

var member = session.QueryOver<Member>()
   .Where(m => m.Email == Model.Email)
   .Take(1).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

好.那么,手头的问题.

  1. 电子邮件地址始终需要比较不区分大小写.

它们始终以小写形式存在于数据库中.为了实现这一目标,我付出了巨大的努力.事实上,我<input>接受它Email Address有一个验证规则,只允许小写字母.但这仍然不够好,我想让它更深入,并确保一切都是犹太洁食.

所以我试着这样做......

var member = session.QueryOver<Member>()
   .Where(m => String.Compare
         (m.Email, Model.Email, StringComparison.OrdinalIgnoreCase) == 0)
   .Take(1).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

我得到一个例外,nhibernate不能使用该String.Compare方法.

我意识到我可以用简单的ToLower()方法来解决这个问题,但是在某些情况下,我希望比其他类型的比较更具粒度.

有人可以帮我弄清楚如何解决这个问题吗?

Pet*_*ter 4

有多种方法可以使用 IsInsensitiveLike 来执行此操作:

   var member= Session.QueryOver<Member>()
       .WhereRestrictionOn(m=>m.Email).IsInsensitiveLike(Model.Email)
       .Take(1).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)