当调试查询时,会产生以下SQL语句:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Description] AS [Description],
FROM [dbo].[ChargeMultipliers] AS [Extent1]
WHERE (UPPER(REPLACE([Extent1].[Description], N' ', @p__linq__0))) = (UPPER(REPLACE(@p__linq__1, N' ', @p__linq__2)))
正如你所看到的,比较也修剪在SQL语句和的String.Empty woud作为参数,但这可能不是传递理解数据库中的空白字符。
我宁愿构建查询前要做到这一点:现在
string descriptionTrim = description.Replace(" ", string.Empty).ToUpper();
var query = from c in context.ChargeMultipliers
where c.Description.Replace(" ", "").ToUpper() == descriptionTrim
select c;
生成的SQL查询看起来很简单,你可以很容易找到真正会在WHERE子句中进行比较:
SELECT
[Extent1].[ID] AS [ID],
[Extent1].[Description] AS [Description],
FROM [dbo].[ChargeMultipliers] AS [Extent1]
WHERE (UPPER(REPLACE([Extent1].[Description], N' ', N''))) = @p__linq__0
请发布异常堆栈跟踪。 –
很可能Linq to Entities无法翻译有效SQL中的c.Description.Replace(“”,string.Empty).ToUpper(),只需尝试使用Linq将Linq上的对象转换为实体。 – Vladimir