【发布时间】:2010-11-24 11:16:11
【问题描述】:
我有一个包含 firstName、middleName 和 lastName 列的数据库。我正在使用 linq for sql 来查询这个表,我的输入是全名,
这是 linq 查询:
var n = customerName.Replace(" ", "%");
var customers = from c in _db.tblCustomers
where ((c.cSurName??"") + " " + (c.cMiddleName??"") + " "+ (c.cLastName??"")).Contains(n)
select c;
以“Jan Rue”作为输入,这将产生以下 SQL where 子句:
WHERE (((((COALESCE([t0].[cSurName],@p0)) + @p1)
+ (COALESCE([t0].[cMiddleName],@p2))) + @p3)
+ (COALESCE([t0].[cLastName],@p4))) LIKE @p5 ESCAPE ''~'''
,N'@p0 nvarchar(4000),@p1 nvarchar(1),@p2 nvarchar(4000),@p3 nvarchar(1),@p4 nvarchar(4000),@p5 nvarchar(11)'
,@p0=N'',@p1=N' ',@p2=N'',@p3=N' ',@p4=N'',@p5=N'%Jan~%Rue%'
它给了我 0 行。如果我删除 ~ 它工作得很好。我有什么办法可以强制 LINQ 不逃跑吗?
编辑解决方案:
where SqlMethods.Like(((c.cSurName ?? "") + " " + (c.cMiddleName ?? "") + " " + (c.cLastName ?? "")), "%" + n + "%")
编辑#2:找到更多信息: "Implementing a LINQ version of SQL’s LIKE Operator"
【问题讨论】: