【问题标题】:How to use Like operator in entity framework lamba expression如何在实体框架 lambda 表达式中使用 Like 运算符
【发布时间】:2015-12-02 11:03:43
【问题描述】:

我正在编写一个用于搜索的 sql 查询,其中用户根据 FirstName 和 LastName 进行搜索。搜索 FirstName 或 LastName 时查询工作正常,但是当我搜索 FirstName 和 LastName(即 FirstName 和 LastName 之间的空格)时,它给出了空白结果。查询字符串如下所示:
http://localhost:4562/api/User/Search?q=sumedha%20v&filters=&offset=3&limit=9

sql查询为:List<AppUser> searchedAppUsers = await _context.AppUser.Where(u => u.Profile.FirstName.StartsWith(q) || u.Profile.LastName.StartsWith(q)).ToListAsync();

我尝试使用Contains() 而不是StartsWith(),但它仍然给出空白结果。我也尝试使用SqlMethods.Like(),但在智能感知中看不到它。我尝试使用SqlFunctions.PatIndex(),但同样的问题。我试图关注this 的帖子,但不知道该怎么做。
还有其他方法吗?还是我哪里出错了?

【问题讨论】:

  • 尝试使用这个查询:var searchedAppUsers = await _context.AppUser.Where(u => u.Profile.FirstName.ToLowerCase().Contains(q.ToLowerCase()) || u.Profile.FirstName.ToLowerCase().Contains(q.ToLowerCase())).ToListAsync();。也许你有不同情况下的查询和数据。

标签: c# sql lambda entity-framework-4


【解决方案1】:

好吧,如果您的搜索词是“sumedha v”,很明显没有包含此字符串的FirstName 或LastName。您显然正在寻找这样的东西:

_context.AppUser
        .Where(u => (u.Profile.FirstName + " " + u.Profile.LastName).Contains(q))

但这可能表现不佳,因为现在查询引擎不能在名称字段上使用任何索引。如果没有很多(数千)用户,这应该不是问题。

也许您打算分别使用搜索字符串的第一部分和第二部分对FirstName 和LastName 进行搜索?像这样:

var parts = q.Split(q, ' ');
var q1 = parts[0];
var q2 = parts[1];
var result = _context.AppUser
                     .Where(u => u.Profile.FirstName.Contains(q1)
                         && u.Profile.LastName.Contains(q2));

(没有空检查)

这样会更好,因为直接查询名称字段。

【讨论】:

  • 抱歉,回复晚了,但是可以。我所做的只是` _context.AppUser .Where(u => u.Profile.FirstName + " " + u.Profile.LastName).Contains(q)` 没有实际包含Split 部分,它给出了预期的结果。
【解决方案2】:

首先,您的查询只检查名字:

List searchedAppUsers = await _context.AppUser.Where(u => u.Profile.FirstName.StartsWith(q) || u.Profile.FirstName.StartsWith( q)).ToListAsync();

其次,据我了解,您正在搜索“John Doe”之类的内容,但 FirstName (“John”) 和 LastName (“Doe”) 都不是以“John Doe”开头的(或者是 LIKE 'John Doe% ')。

再想想你的 SQL 会是什么。

【讨论】:

  • O 在发布问题时犯了一个错误。我已经更新了这个问题。该查询也会检查 LastName。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多