在Select return 0返回中选择。怎么调试?

时间:2017-03-30 13:56:02

标签: c# linq

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; ....是不会调试的地方。

思考?也许我的代码比它需要的更复杂。

2 个答案:

答案 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。你可以从那里去。