sum*_*dha 0 c# sql lambda entity-framework-4
我正在编写一个用于搜索的 SQL 查询,用户根据名字和姓氏进行搜索。当搜索名字或姓氏时,查询工作正常,但是当我搜索名字和姓氏(即名字和姓氏之间的空格)时,它给出空白结果。查询字符串如下所示:
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(),但同样的问题。我试图关注这篇文章,但不知道如何去做。
还有其他办法吗?或者我在某个地方出错了?
好吧,如果您的搜索词是“sumedha v”,很明显没有FirstName或LastName包含此字符串。您显然正在寻找这样的东西:
_context.AppUser
.Where(u => (u.Profile.FirstName + " " + u.Profile.LastName).Contains(q))
Run Code Online (Sandbox Code Playgroud)
但这可能表现不佳,因为现在查询引擎无法在名称字段上使用任何索引。如果用户不多(数千),这应该不是问题。
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));
Run Code Online (Sandbox Code Playgroud)
(没有空检查)
这会执行得更好,因为名称字段是直接查询的。
| 归档时间: |
|
| 查看次数: |
6451 次 |
| 最近记录: |