2014-05-22 51 views
0

我想通过自己的全名使用LINQ来过滤用户到SQL过滤创建类型(Type)只有原始类型的恒定值:无法当我试图通过concatened串

string agentName = "Jhone Doe TheFirst"; 


db.User.Where(a => agentName == (a.Person.Name+ ' ' + 
           a.Person.FirstName + ' ' + 
           a.Person.LastName).ToString() 
        && !a.Deleted) 

但是,当我执行此COMAND,一个execption抛出:

无法创建类型(类型)的恒定值只有原始类型 (“如的Int32,字符串,和GUID”)的支持。

连接字符串不可能吗?

我该如何过滤用户的全名?

它的LINQ to SQL的,所以我不能创建一个返回的人的全名的方法,并做了Person.GetFullName()

+0

这是一个字符串,我作为参数传递,编辑 –

+2

你试过用'“”而不是''''? – Sayse

回答

3

首先,我必须承认,我没那么熟悉的LINQ到SQL ,所以这只是一个猜测。也许这些列的一个可空,级联也产生NULL,那么你可以通过使用空合并运算避免这种情况:

db.User.Where(a => (agentName == (a.Person.Name  ?? "") + " " 
           + (a.Person.FirstName ?? "") + " " 
           + (a.Person.LastName ?? "")) && !a.Deleted) 

请注意,我还与" "更换' '

+0

已经+1版,但只是指出'string.Join'会更整齐 – Sayse

+0

@Sayse:_“LINQ to SQL不支持以下String方法:..... String.Format,String.Join “_ http://msdn.microsoft.com/en-us/library/bb882672(v=vs.110).aspx –

+0

哦,对,我今天学到了一些新东西:) – Sayse