Nhibernate + QueryOver:过滤忽略敏感的地方

Lef*_*tyX 10 c# nhibernate queryover

我正在尝试使用QueryOver在nHibernate中构建一个简单的查询,但我希望它将所有内容转换为小写或忽略敏感:

Domain.User User = Session.QueryOver<Domain.User>()
       .Where(x=>x.Login=="username")
       .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

更新:

有人建议问题可能在于DB的收集,但我从来没有遇到任何问题,这个脚本有效:

Domain.User User = Session
    .CreateCriteria<Domain.User>() 
    .Add(Expression.Eq("Login", "username")) 
    .UniqueResult<Domain.User>(); 
Run Code Online (Sandbox Code Playgroud)

Sly*_*Sly 17

在QueryOver中,您可以使用以下内容:

Domain.User User = Session.QueryOver<Domain.User>()
       .WhereRestrictionOn(x=>x.Login).IsInsensitiveLike("username")
       .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 小心 - 允许用户输入为LIKE表达式很容易成为一个很大的安全漏洞.NB,OP确实*不*要求一个Like,但是为了平等(这是有意义的) (5认同)

小智 5

我的解决方法是使用一个表达式与一个投影相结合,所以一个不区分大小写等于没有任何魔术字符串可以使用查询

query.Where(Expression.Eq(Projections.Property(Of MyType)
                (Function(x) x.Name), "something").IgnoreCase)
Run Code Online (Sandbox Code Playgroud)