我是Entity Framework,LINQ和lambda表达式的新手。我需要在用户的表上进行搜索,我需要模拟桌面应用程序中已存在的表。此搜索只提供1个文本字段,然后它会包含您放入其中的任何内容,并在不同用户的属性(如姓名,姓氏,用户名等)上创建“包含”查询。最重要的部分是,如果您放置两个或者更多的单词然后搜索使查询搜索不同的单词。
示例:
如果我搜索“ju pe”,我会得到“Perez,Juan”,这可以通过识别空格来实现。
使用常规SQL我可以构建一个包含查询的常规字符串,但是如何使用lambda呢?
换句话说,如何在.where()
上获得动态数量的“评估”?与.Where(EV1 || EV2 || EVn)
答案 0 :(得分:1)
有一个名为LinqKit的简洁库,其中包含predicatebuilder
示例代码:
var predicate = PredicateBuilder.True <User> ();
predicate = predicate.Or(x => x.Name.Contains("ju"));
predicate = predicate.Or(x => x.Name.Contains("pe"));
// etc ...
Users.AsExpandable().Where(predicate);
您可以和/或尽可能多地喜欢。
答案 1 :(得分:0)
如果我理解正确的话,您可以通过构建复杂的Where
谓词使用简单的Linq来完成此操作。如果我误解了你,请告诉我!假设您有一个字符串searchTermInput
和users
,IEnumerable<User>
用于User
类型的Name
字符串属性。然后你可以写:
users.Where(user => searchTermInput.Split(' ')
.All(searchTerm => user.Name.Contains(searchTerm)));
换句话说:对于每个用户,检查该用户的名称是否包含每个搜索词,如果不包含,则将其过滤掉。