2011-05-04 51 views
3

我有一个linq查询,其中我想包括那些非空或空的数据库字段的记录,但是当我使用string.isNullorEmpty它给了我错误。我怎样才能实现这个任务,我的查询是linq查询中使用string.IsnullorEmpty的问题

from post in PostIdPostMeta1 
join pstmt in postrepository.GetAllPostMetas() on post.int_PostId equals pstmt.int_PostId 
where string.IsNullOrEmpty(pstmt.vcr_MetaValue) == false 
select post 

如果我改变string.IsNullOrEmpty(pstmt.vcr_MetaValue)==假pstmt.vcr_MetaValue!=的String.Empty它给我SQL Server会不处理NTEXT的比较,文本,XML或图像数据类型错误

+1

什么是错误? – Aliostad 2011-05-04 10:02:25

+0

布尔IsNullOrEmpty(System.String)'没有支持转换为SQL – 2011-05-04 10:03:54

回答

5

那么,错误消息似乎相当明确的 - 我怀疑,如果你希望能够做到这一点,你需要使用的,而不是text/ntextnvarchar场。

编辑:这不只是一个需要正确类型的数据库字段;它也是LINQ to SQL认为它的类型。你需要保持你的DBML同步您的实际数据库模式。

+0

字段已经是数据库中的nvarchar – 2011-05-04 10:39:39

+0

@Fraz:你绝对*确定*?错误消息强烈表明它不是。在某些早些时候是文本/文字吗?也许你需要更新LINQ to SQL实体... – 2011-05-04 10:40:56

+0

是的我的错误,我忘记更改数据库中的数据类型后更新DBML – 2011-05-04 10:56:17

1

试试这个代码:

from post in PostIdPostMeta1 
join pstmt in postrepository.GetAllPostMetas() on post.int_PostId equals pstmt.int_PostId 
where ((pstmt.vcr_MetaValue != "") && (pstmt.vcr_MetaValue != null)) 
select post 
1

你试过repla庆安

where string.IsNullOrEmpty(pstmt.vcr_MetaValue) 

where pstmt.vcr_MetaValue != null && pstmt.vcr_MetaValue != string.Empty 

+0

它给我SQL Server不处理NText,Text,Xml或图像数据类型的比较错误 – 2011-05-04 10:32:13

0

我不知道你所使用的LINQ提供程序,并从快速谷歌,荷兰国际集团似乎IsNullOrEmpty是没有得到普遍支持。输入时弹出的答案看起来正确。

1

如果数据库字段是NTEXT,您可以检查是否领域并不像空字符串。这是一个例子。

from post in PostIdPostMeta1 
join pstmt in postrepository.GetAllPostMetas() on post.int_PostId equals pstmt.int_PostId 
where !SqlMethods.Like(pstmt.vcr_MetaValue, "") 
select post 
+0

就像方法不检查空字段,所以我已经移除例如空检查。 – 2013-11-20 11:01:44