var items = pSelectedItem.Nodes
.Expand(e => e.Nodes)
.Where(e => e.Nodes == null)
.Select(e => e.Tag as List<ActionObject>)
.Select(e=> e.Select (i=>i as ActionObject)
.Where(i => i != null)
.Select(i => new ListViewItem()
{
Tag = new ListViewValue[]
{
new ListViewValue() { Value = i.Command },
new ListViewValue() { Value = i.Target },
new ListViewValue() { Value = i.Value },
new ListViewValue() { Value = i.Comment }
}
}) as ListViewItem);
return new ObservableCollection<ListViewItem>(items);
上面的代码,我试图捕获所有listviewitems。每个列表视图项都有一个标记属性。此标记属性的类型为object。
上面的代码对我来说完全合理,但它始终返回null。我试过调试上面的代码,遗憾的是上面的代码不允许我调试内部选择代码。 e.Select(i =&gt; ....是不会调试的地方。
思考?也许我的代码比它需要的更复杂。
答案 0 :(得分:1)
请尝试SelectMany
,而您当前正在选择IEnumerable<IEnumerable<ListViewItem>>
:
var items = pSelectedItem.Nodes
.Expand(e => e.Nodes)
.Where(e => e.Nodes == null && e.Tag is List<ActionObject>)
.Select(e => (List<ActionObject>)e.Tag)
.SelectMany(aclist => aclist.Where(ac => ac != null))
.Select(i => new ListViewItem()
{
Tag = new ListViewValue[]
{
new ListViewValue() { Value = i.Command },
new ListViewValue() { Value = i.Target },
new ListViewValue() { Value = i.Value },
new ListViewValue() { Value = i.Comment }
}
};
答案 1 :(得分:0)
调试的一种方法是逐个注释Where语句,看看你是否得到了结果。这将帮助您了解哪个where子句导致结果返回null。你可以从那里去。