【问题标题】:How do I write a linq query against a ListCollectionView?如何针对 ListCollectionView 编写 linq 查询?
【发布时间】:2011-05-26 17:26:15
【问题描述】:

这些似乎都不起作用:

var source = myViewModel.MyListCollectionView.Select(x => x as MyType);
var source = myViewModel.MyListCollectionView.Select<object, MyType>(x => x as MyType);
var source = myViewModel.MyListCollectionView.SourceCollection.Select<object, MyType>(x => x as MyType);

【问题讨论】:

    标签: c# wpf linq mvvm listcollectionview


    【解决方案1】:

    ListCollectionView 只实现了非泛型的IEnumerable 接口。我怀疑你想要:

    var source = myViewModel.MyListCollectionView.Cast<MyType>();
    

    或者(如果某些值不是MyType,那没关系):

    var source = myViewModel.MyListCollectionView.OfType<MyType>();
    

    【讨论】:

    • 次要注意:OfType 也会删除空项。
    【解决方案2】:
    var source = myViewModel.MyListCollectionView.OfType<MyType>();
    

    【讨论】:

      【解决方案3】:

      InternalList 属性的类型为 IList,因此您可以针对它编写 linq 查询。

      【讨论】:

      • 实际上 var source = myViewModel.MyListCollectionView.InternalList.Select(x=>x.MyProperty);不起作用
      • 这是非通用的 IList,因此您仍然必须使用 Cast。更不用说这是一个受保护的属性,除非您扩展 ListCollectionView,否则您无法访问它
      【解决方案4】:

      啊啊啊找到了。你必须先使用 Cast!

      var source = myViewModel.MyListCollectionView.Cast<MyType>().Select(p=>p.MyProperty);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 2021-01-15
        • 2017-11-23
        • 1970-01-01
        • 1970-01-01
        • 2020-12-02
        相关资源
        最近更新 更多