2011-04-25 85 views
6

如何在两个组合字段上搜索。如果可能的话,搜索应该发生在SQL端。实体框架4在组合字段上搜索

所以说我有一个名字和姓氏的客户表。我希望用户能够使用单个搜索框在这两列上进行搜索。

我的查询目前看起来是这样的:

var query = DbContext.Customers 
    .Where(c => c.FirstName.Contains(search) || c.LastName.Contains(search)); 

,但它应该是这样的

var query = DbContext.Customers 
    .Where(c => c.FullName.Contains(search)); 

回答

14

,除非你有FullName柱也映射这是不可能的。解决此问题的方法可以String.Concat这是允许的LINQ到实体:

var query = DbContext.Customers 
        .Where(p => String.Concat(p.FirstName, " ", p.LastName) 
             .Contains(search)); 
+0

的伟大工程,THX。 – 2011-04-25 20:35:35

+0

我试图在分部类中添加一个FullName属性,然后使用您的String.Concat版本而不是仅仅组合字符串,并且我仍然得到了“类型成员FullName在linq-to-entities中不受支持”的任何方式得到这个工作? – 2012-06-18 09:11:34

+2

@Mvision:您不能在L2E中使用非映射属性。 – 2012-06-18 09:27:44

1

你可以在数据库中使用计算列和其映射 例如

alter table Customer add FullName AS FirstName + ' ' + LastName 

(不漂亮,我知道)