LINQ在哪里不返回预期值

时间:2013-08-15 13:18:32

标签: c# linq where

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

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是一个包含数组的List,其中包含每行中的字符串。

此语句返回null。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

表达是完美的,因为它是。我不知道为什么它不起作用。

你可以让它变得更容易:

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

但我不明白为什么。

问题可能是null stringnull 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

答案 1 :(得分:0)

Xanatos是对的......这是关于Null的价值..之前应该注意到了。 一个简单的空检查就足够了:

from d in data
from c in d
where c!=null &&  c.Length > 5
select d