【发布时间】:2016-03-29 16:52:07
【问题描述】:
我想知道当我在实体框架中使用文本类型字段时如何搜索空字符串。
我查看了 Entity 正在生成的 SQL 查询,它使用 LIKE 进行比较,因为它在文本类型字段中搜索,所以当我使用 .Equals(""), == "", == string.Empty , .Contains(""), .Contains(string.Empty) 和其他所有内容,它返回所有结果,因为它的 sql 查询类似于 '' 并且 == 命令抛出异常,因为它使用了无效的 = 命令文本类型字段。
当我尝试使用 .Equals(null), .Contains(null), == null 时,它什么也不返回,因为它正在生成 FIELD ISNULL 命令。
我已经尝试过 .Lenght == 0 但它会引发异常...
【问题讨论】:
-
where(f => f.MyField == "")应该可以工作。也许你可以使用 linqCount()函数:where(f => f.MyField.Count() == 0) -
这不可能。
Contains确实映射到LIKE,但== ""应该生成类似N'' = [Extent1].[Field]的东西 -
请展示一个示例,
== string.Empty和生成的 SQL。你(或我们)一定忽略了一些东西。 -
亚历山大,Count() == 0 thow 例外:
DbExpressionBinding requires an input expression with a collection ResultType.\r\nNome do parâmetro: input,。我想这是因为它是一个字符串而不是一个集合,我必须使用 Lenght。 == "":The data types varchar and text are incompatible in the equal to operator.对不起,我忘了说 == 在 SQL Query 中映射到 = 并且它会抛出文本类型的异常。我试图强调我已经尝试了所有方法,并且 == string.Empty 表示 equals(string.Empty)。 -
嗯,这是一个重要的细节。该列具有已弃用的数据类型
text,无法搜索。可以改成nvarchar(max)吗?
标签: sql-server entity-framework linq orm sql-like