在 EF6 模型中的多列中使用 String.Contains()

Jef*_*ume 0 c# sql-server entity-framework

我觉得这很简单,我只是想念它......

需要从这样的模型中一起对 FirstName 和 LastName 列进行快速而肮脏的文本搜索:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

样本数据:

FirstName            LastName
-------------------------------
John                 Appleseed
John                 Anderson
Chris                Cringle
George               Washington
Run Code Online (Sandbox Code Playgroud)

后端是 SQL Server,使用 LINQ to Entities 和 Entity Framework 6,我需要查找全名,但这样的事情不起作用:

var results = from p in db.Persons
              where (p.FirstName + ' ' + p.LastName).Contains(keyword)
              select p;
Run Code Online (Sandbox Code Playgroud)

LINQ 不喜欢那样。这是一个自动完成方法;如果有人输入“john a”,我希望它能够找到“john a”的结果——它将是样本数据的前两行。

我该怎么做?

Ser*_*rvy 5

EF 只能连接字符串;它不能连接字符。如果是 LINQ to Objects,char它将被转换为字符串而不会出现任何问题,但 EF 不够健壮,无法做到这一点。尽管如此,修复还是很简单的。对空格使用文字字符串,而不是文字字符:

var results = from p in db.Persons
              where (p.FirstName + " " + p.LastName).Contains(keyword)
              select p;
Run Code Online (Sandbox Code Playgroud)