我进行了搜索,用户输入了一个字符串。例如,“ Smith,George”以在数据库中搜索名称。此名称在数据库中的格式为“ LastName”和“ FirstName”,因此记录如下所示:“ Smith”“ George”。
在模型中,我串联了“姓氏”和“名字”字段,以便它们像“ Smith,George”这样出现在视图中
我需要做的是解析逗号并分别搜索姓氏和名字字段。
这是我拥有的控制器代码。当仅输入两个字段中的一个或另一个时,它不会完成搜索。
[HttpGet]
public ActionResult Index()
{
return View(_db.Owners.ToList());
}
[HttpPost]
public ActionResult Index(string searchString)
{
var owners = from o in _db.Owners select o;
if (!String.IsNullOrEmpty(searchString))
{
owners = owners.Where(o => o.LastName.Contains(searchString) || o.FirstName.Contains(searchString));
}
return View(owners);
}
答案 0 :(得分:1)
我强烈建议您阅读以下经典文章:https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
您串联的"{Last}, {First}"
字符串是视图级别的问题,不应在数据库代码中执行。您的数据库和内部模型对象应以某种规范格式(例如,可能具有单独的字段(但所有字段都应为可选字段)存储人的姓名)的标题,第一,中间,最后,后缀以及您的其他任何适当的文化习俗地区或业务领域的需求。
然后使用支持某种基于字段的搜索语法的单个搜索框,以允许用户通过自由文本搜索找到用户,如果知道他们正在用“ John”寻找某人,也可以通过精确字段来查找人作为他们的姓氏,而不是“ Johnson”作为姓氏。
也不要忘记分词。我推荐这样的东西:
String input = "O'Brien firstname:John";
:O'Brien
-> OBrien
),也许也规范化为SOUNDEX(SQL Server具有内置的SOUNDEX支持:https://docs.microsoft.com/en-us/sql/t-sql/functions/soundex-transact-sql?view=sql-server-2017)[ any: "OBrien", firstname: "John" ]
(为此可以使用一个简单的正则表达式).Where
表达式,请注意,串联.Where
等效于AND
运算符。如果要使用多个{{1} }作为.Where
操作,您将需要OR
,请参见此处:How to dynamically add OR operator to WHERE clause in LINQ 类似的东西:
PredicateBuilder
答案 1 :(得分:0)
min(m, n)