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

时间:2014-02-03 16:18:06

标签: c# sql-server entity-framework

我觉得这很简单,我只是错过了......

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

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

示例数据:

FirstName            LastName
-------------------------------
John                 Appleseed
John                 Anderson
Chris                Cringle
George               Washington

Backend是SQL Server,使用LINQ to Entities和Entity Framework 6,我需要对全名进行查找,但是这样的东西不起作用:

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:4)

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

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