如何在linq中组合两个字段?

时间:2013-10-01 07:29:27

标签: c# linq linq-to-sql

我有以下要搜索的实体..如何组合两个字段以获得正确的输入..

类似这样的事情

var personnels = dbContext.Set<Personnel>()
                          .Where(p => 
                             (p.FirstName + ' ' + p.Surname).Contains("John Smith")
                          );

当我这样做时,它说

  

无法创建“System.Object”类型的常量值。在此上下文中仅支持原始类型或枚举类型。

这是我要修复的代码

var personnels = dbContext.Set<Domain.Entities.App.Personnel>().Where(p =>
            ((p.GivenName  + p.Surname).Contains(criteria.PersonnelName) ||  String.IsNullOrEmpty(criteria.PersonnelName))
             && (p.PersonnelRoleId == criteria.PersonnelRoleId || (criteria.PersonnelRoleId ?? 0) == 0)
             && (((criteria.ActiveOnly && (p.ActiveFlag)) || (criteria.ActiveOnly == false)))).AsEnumerable();

代码有效,但只有当条件是johnsmith而不是john smith时它才有效..

所以这一行是

(p.GivenName  + p.Surname).Contains(criteria.PersonnelName) 

如何在那里获得空间

(p.GivenName  + ' ' +  p.Surname).Contains(criteria.PersonnelName)  

不起作用

2 个答案:

答案 0 :(得分:2)

所以不要使用

(p.GivenName  + ' ' +  p.Surname).Contains(criteria.PersonnelName)  

我用过

(p.GivenName  + " " +  p.Surname).Contains(criteria.PersonnelName)  

唯一不同的是报价......

并且有效

答案 1 :(得分:0)

Where(x => String.Format("{0} {1}", x.FirstName, x.LastName).Contains("John Smith")).AsEnumerable();