【问题标题】:Linq: Checking if string column has a value (ie. is not null or empty)Linq:检查字符串列是否有值(即不为空或为空)
【发布时间】:2012-07-29 16:38:37
【问题描述】:

不确定这是否是在 Linq 中实现这一目标的最佳方式。

我正在尝试选择 CRM 2011 中的联系人记录,其中 EMailAddress1 包含一个值。我尝试的以下 WHERE 子句都导致了异常:

Where c.EMailAddress1 > ""

Where Not String.IsNullOrEmpty(c.EMailAddress1)

所以我最终尝试了这个,这似乎工作正常:

Where Not c.EMailAddress1.Equals(String.Empty) _
And Not c.EMailAddress1.Equals(Nothing)

但我只是不确定这是否是最有效的方法.. 它似乎不是很优雅。有没有更简洁的方法来检查字符串列是否有值?

【问题讨论】:

  • 当你使用 String.IsNullOrEmpty 时,你得到的异常是什么?
  • EMailAddress1 是什么数据类型?
  • @ForteL。例外是“无效的 'where' 条件。实体成员正在调用无效的属性或方法。”。数据类型为字符串。
  • 我指的是数据库中的数据类型
  • 啊,不确定,这是 CRM 2011 的远程安装,但我认为它会是 nvarchar。

标签: vb.net linq dynamics-crm-2011


【解决方案1】:

正如here Linq to CRM 所说,确实是有限的。这就是你不能使用 String.IsNullOrEmpty 的原因。

但是,您应该尝试这样做:

Where c.EMailAddress1 IsNot Nothing

当一个字段为空时,它在数据库中被设置为空(从不为空)。那么这条线应该足够你的情况了。

问候,

凯文

【讨论】:

  • 感谢您的链接。不过,我也想检查“”(空白字符串,不为空),所以没有任何东西本身是不够的。似乎必须使用 2 个条件来完成,足够公平。
  • 实际上,如果用户让空白字段,它将为NULL。如果您使用 linq 处理空白字符串,您将永远找不到任何结果。所以“IsNot Nothing”就足够了。
  • 这只是 Linq 的行为吗?许多数据库设计避免了可为空的列。在这种情况下不确定 CRM 2011。但是假设数据库中的一列是 VarChar NOT NULL,那么 linq 会以不同的方式处理 null 和“”(空)吗?
  • 这是 CRM 2011 的行为。如果字段为空(= 空字符串),CRM 将在数据库中将其设置为 NULL。在 CRM 数据库中,所有列都可以为空,需求由 CRM 程序本身管理,而不是数据库。这就是为什么您不必处理空字符串的原因。它们在 CRM 中不存在。
【解决方案2】:

就这样吧:

Where c.EmailAddress <> ""

【讨论】:

  • 这也会引发异常:“无效的 'where' 条件。实体成员正在调用无效的属性或方法。”
  • Where(Function(s) s.EmailAddress "") = 有效!未选择 Null 和 Empty 字符串。
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 2020-05-29
  • 2017-08-19
  • 1970-01-01
  • 2011-04-05
  • 2015-06-12
  • 2017-01-10
  • 2010-10-23
相关资源
最近更新 更多