0

为什么以下代码段没有返回预期结果?

List<string[]> data
//filling list with some values (left here out to make problem more clear)

var allRowsHavingSomeWordWithLengthGreaterThanFive = (from d in data
                         from c in d
                         where c.Length > 5
                         select d);

data 是一个列表,其中包含一个数组,该数组在每一行中都包含字符串。

此语句返回 null。

我究竟做错了什么?

4

2 回答 2

1

表达是完美的,因为它是。我不知道为什么它不应该工作。

你可以让它更容易一点:

var allRowsHavingSomeWordWithLengthGreaterThanFive = 
         from d in data
         where d.Any(q => q.Length > 5)
         select d;

但我不明白为什么。

也许问题在于有null strings 或null string[]?

var allRowsHavingSomeWordWithLengthGreaterThanFive = (from d in data
                                                      where d != null
                                                      from c in d
                                                      where c != null && c.Length > 5
                                                      select d).ToArray();

见测试者http://ideone.com/ci8zw1

于 2013-08-15T13:27:10.673 回答
0

Xanatos 是对的……它是关于 Null 值的……应该早点注意到。一个简单的空检查就足够了:

from d in data
from c in d
where c!=null &&  c.Length > 5
select d
于 2013-08-15T13:41:13.697 回答