动态的评估数量(lambda)

时间:2013-05-27 20:09:59

标签: linq entity-framework lambda

我是Entity Framework,LINQ和lambda表达式的新手。我需要在用户的表上进行搜索,我需要模拟桌面应用程序中已存在的表。此搜索只提供1个文本字段,然后它会包含您放入其中的任何内容,并在不同用户的属性(如姓名,姓氏,用户名等)上创建“包含”查询。最重要的部分是,如果您放置两个或者更多的单词然后搜索使查询搜索不同的单词。

示例:

如果我搜索“ju pe”,我会得到“Perez,Juan”,这可以通过识别空格来实现。

使用常规SQL我可以构建一个包含查询的常规字符串,但是如何使用lambda呢?

换句话说,如何在.where()上获得动态数量的“评估”?与.Where(EV1 || EV2 || EVn)

一样

2 个答案:

答案 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来完成此操作。如果我误解了你,请告诉我!假设您有一个字符串searchTermInputusersIEnumerable<User>用于User类型的Name字符串属性。然后你可以写:

users.Where(user => searchTermInput.Split(' ')
                    .All(searchTerm => user.Name.Contains(searchTerm)));

换句话说:对于每个用户,检查该用户的名称是否包含每个搜索词,如果不包含,则将其过滤掉。