代码之家  ›  专栏  ›  技术社区  ›  empz

如何使用linq to实体检查SQL Server 2005文本列是否不为空?

  •  2
  • empz  · 技术社区  · 16 年前

    我刚接触Linq,我正在尝试检查文本列是否为空(如string.isNullOrEmpty)。

    from c in ...
    ...
    select new
            {
                c.Id,
                HasBio = !String.IsNullOrEmpty(c.bio)
            }
    

    尝试使用上述查询会产生一个sqlException:

    Argument data type text is invalid for argument 1 of len function.
    

    生成的SQL类似于以下内容:

    CASE WHEN ( NOT (([Extent2].[bio] IS NULL) OR (( CAST(LEN([Extent2].[bio]) AS int)) = 0))) THEN cast(1 as bit) WHEN (([Extent2].[bio] IS NULL) OR (( CAST(LEN([Extent2].[bio]) AS int)) = 0)) THEN cast(0 as bit) END AS [C1]
    

    len不适用于文本列。我知道数据长度应该用于它们…

    我怎么能强迫林基生产这种东西?或者其他测试文本列是否为空的变通方法????

    谢谢!

    更新

    我想到这个

    HasBio = c.bio.Substring(0, 1).Length > 0
    

    但是有点难看,还有其他选择吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   empz    16 年前

    考虑到下面的文章,我决定将文本列转换为varchar(max)。

    http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx

        2
  •  0
  •   aamir sajjad    14 年前
    powerCircuitList.Where(t => t.textProperty!= null && t.textProperty!= "")