2

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

例子:

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

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

换句话说,我怎样才能获得动态数量的“评估” .where()?喜欢.Where(EV1 || EV2 || EVn)

4

2 回答 2

1

有一个名为 LinqKit 的整洁库,其中包含谓词构建器

示例代码:

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);

您可以和/或随心所欲。

于 2013-05-27T21:30:25.910 回答
0

Where如果我理解正确,您可以使用简单的 Linq 通过构建复杂的谓词来做到这一点。如果我误解了你,请告诉我!假设您有一个字符串searchTermInputusers,对于具有字符串属性IEnumerable<User>的某些类型。然后你可以写:UserName

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

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

于 2013-05-27T23:37:06.903 回答