gpt4 book ai didi

c# - 如何使用 nhibernate/linq 进行不区分大小写和串联字段搜索?

转载 作者:行者123 更新时间:2023-11-30 16:54:36 31 4
gpt4 key购买 nike

我有一个使用 Fluent Nhibernate Linq/SQL Server 的 asp.net-mvc 网站。我有一个文本框,有人可以在其中输入姓名并生成以下查询,我现在正在使用它来搜索我的 Person 表:

 return Session.Query<Person>()
.Where(r => (r.LastName.Contains(s) || r.FirstName.Contains(s)));

这在转换为“类似 SQL 的查询”方面按预期工作

 Select * from Person where FirstName like '%%' or LastName like '%%'

但我不确定 nhibernate linq 是否支持 2 个新要求。

  1. 在某些情况下,人们以大写或小写形式输入姓名,因此我希望能够进行不区分大小写的搜索。

  2. 由于它是一个单一的文本框,在某些情况下人们会同时输入名字和姓氏(例如“Smith, Joe”,并且无法找到结果,因为整个字符串都不存在于名字或姓氏字段。除了将 UI 分成单独的字段(由于某些其他原因我不能这样做)之外,是否有关于如何支持查询以包含以下用户搜索字符串组合的建议

    • [第一个] [最后一个]
    • [最后]、[第一个]

在上面的搜索代码中。

最佳答案

要解决上下混合的问题,我们可以将两边都转换成.ToLower()

return Session.Query<Person>()
.Where(r => (r.LastName.ToLower().Contains(s.ToLower())
|| r.FirstName.ToLower().Contains(s.ToLower())));

查看此链接以了解 NHibernate 原生 InsensitiveLikeExpression.cs 如何工作的更多详细信息(对于几乎所有方言,它都在做同样的事情) :

第二部分,这里是一些 super 简单的算法(如果有的话)

var first = searched.Split(' ')[0].ToLower();
var last = searched.Split(' ')[1].ToLower();

var emps = session.Query<Person>()
.Where(e =>
(e.FirstName.ToLower().StartsWith(first)
&& e.LastName.ToLower().StartsWith(last))
||
(e.FirstName.ToLower().StartsWith(last)
&& e.LastName.ToLower().StartsWith(first))
)

可以使用非常相似的解决方案(我也是) 进行组合框搜索...“Ra Ko”也可以在其中找到 Radim Kohler...

关于c# - 如何使用 nhibernate/linq 进行不区分大小写和串联字段搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30303757/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com