【问题标题】:Problem using string.IsnullorEmpty in linq query在 linq 查询中使用 string.IsnullorEmpty 的问题
【发布时间】:2011-05-04 10:00:52
【问题描述】:

我有一个 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) == false 更改为 pstmt.vcr_MetaValue != string.Empty 它会给我 SQL Server 没有处理 NText、Text、Xml 或 Image 数据类型的比较错误

【问题讨论】:

  • Boolean IsNullOrEmpty(System.String)' 不支持对 SQL 的转换

标签: c# linq


【解决方案1】:

好吧,错误消息似乎相当清楚 - 我怀疑如果您希望能够做到这一点,您需要使用 nvarchar 字段而不是 text / ntext

编辑:不仅仅是数据库字段需要是正确的类型;它也是 LINQ to SQL 认为的类型。您需要让您的 DBML 与您的实际数据库架构保持同步。

【讨论】:

  • @Fraz:你绝对确定吗?错误消息强烈表明它不是。是以前的 text / ntext 吗?也许您需要更新 LINQ to SQL 实体...
  • 是的,我的错误是我在更改数据库中的数据类型后忘记更新 DBML
【解决方案2】:

您是否尝试过替换

where string.IsNullOrEmpty(pstmt.vcr_MetaValue)

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

?

【讨论】:

  • 它给我 SQL Server 不处理 NText、Text、Xml 或 Image 数据类型的比较错误
【解决方案3】:

试试这个代码:

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

【讨论】:

    【解决方案4】:

    如果 DB 字段是 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
    

    【讨论】:

    • Like 方法不检查空字段,所以我从示例中删除了空检查。
    【解决方案5】:

    我不确定您使用的是哪个 linq 提供程序,并且从快速谷歌搜索来看,似乎 IsNullOrEmpty 并未得到普遍支持。键入此内容时弹出的答案看起来是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多