2012-07-31 203 views
5

不确定这是否是在Linq中实现此目的的最佳方法。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) 

但我只是不能确定这是否是最有效的方法..它看起来不太优雅。有没有更好的方法来检查字符串列是否有值?

+1

当您使用String.IsNullOrEmpty,什么是你所得到的例外呢? – 2012-07-31 20:15:51

+0

什么数据类型是EMailAddress1? – 2012-07-31 20:19:31

+0

@ForteL。例外情况是“无效”,其中“条件。实体成员正在调用无效的属性或方法”。数据类型是字符串。 – 2012-08-01 04:54:00

回答

4

至于说here LINQ到CRM确实是有限的。这就是为什么你不能使用String.IsNullOrEmpty。

但是,你应该试着这样做:

Where c.EMailAddress1 IsNot Nothing 

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

问候,

凯文

+0

感谢您的链接。我也想检查“”(空白字符串,不为空),所以没有任何东西本身是不够的。似乎必须使用2个条件才能完成,够公平的。 – 2012-08-02 15:14:27

+1

实际上,如果用户让空白字段,它将是NULL。如果您使用linq查看空白字符串,您将永远找不到任何结果。所以“不是没有”应该就够了。 – 2012-08-03 07:48:50

+0

这只是一个Linq的行为?许多数据库设计都避免可空列。在这种情况下,不确定CRM 2011。但假设db中的列是VarChar NOT NULL,那么linq会以不同的方式处理null和“”(空)吗? – 2012-08-03 11:08:29

2

只是做:

Where c.EmailAddress <> "" 
+0

这也引发了异常:“无效”where条件。实体成员正在调用无效的属性或方法。“ – 2012-08-01 05:22:47

+0

Where(函数s.EmailAddress <>“”)=工作!空字符串和空字符串未被选中。 – 2017-05-26 15:09:33