我编写的应用程序有一个搜索栏,允许用户按名称搜索人员 - 名字,中间名和姓氏
搜索输入可以是名字或中间名或姓氏。或者First和name的组合;第一名和中名等......
或全名。
现在我正在这样做:
var result = People.Where(e => e.FirstName.ToLower().Contains(model.Name.ToLower()) || e.LastName.ToLower().Contains(model.Name.ToLower()) || e.MiddleName.ToLower().Contains(model.Name.ToLower()));
我想知道这是最有效的方式还是可以改进?
答案 0 :(得分:4)
正如 Marco Alves 所说,您可以这样使用LINQKit库:
var predicate = PredicateBuilder.New<People>();
if(!String.IsNullOrEmpty(model.FirstName))
predicate = predicate.Or(p => p.FirstName.Contains(model.FirstName));
if(!String.IsNullOrEmpty(model.LastName))
predicate = predicate.Or(p => p.LastName.Contains(model.LastName));
if(!String.IsNullOrEmpty(model.MiddleName))
predicate = predicate.Or(p => p.MiddleName.Contains(model.MiddleName));
var result = context.People.AsExpandable().Where(predicate).ToList();
答案 1 :(得分:0)
你可能正在寻找类似Predicate Builder的东西,它允许你更容易地控制where语句的AND和OR。
还有Dynamic Linq允许您像SQL字符串一样提交WHERE子句,它会将其解析为WHERE的正确谓词。
答案 2 :(得分:0)
您可以考虑连接所有姓名并检查var result = People.Where(e =>
(e.FirstName + " " + e.MiddleName + " " + e.LastName).IndexOf(model.Name) > -1);
while (value != 5);