0

基本场景是这样的:

class MyBase {}
class MyClassA : MyBase {}
class MyClassB : MyBase {}
class MyClassC : MyBase {}

我有一个被调用的IEnumerable集合,它实际上包含一个或多个项目的集合。总是只有一个或另一个。MyBasesourceMyClassAMyClassBMyClassC

我现在想创建该集合的过滤副本,因此我执行类似于此的操作:

IEnumerable<MyBase> filtered = source.Where(s => s.SomeProperty == someVar)

问题是,如果我在源代码上调用 GetType() 方法,它会说它是 MyClass(A、B 或 C)的集合。但是在过滤后执行 GetType() 表示它是 MyBase 的集合!

我需要它保持不变!

这给我带来了问题,因为我将过滤后的集合绑定到PivotControl现在无法MyClass在过滤后的集合中看到它需要的属性。

因为我们不知道集合中的 A、B 或 C 类中的哪一个,所以我什至尝试过这个:

var entity = source.FirstOrDefault();    
IEnumerable<MyBase> filtered = FilterData(entity);

IEnumerable<MyBase> FilterData<T>(T typeOfObject) where T : MyBase
{
    IEnumerable<T> data = from s in source where s.SomeProperty == someVar select s as T;
    return data;

- 或者 -

    return source.Where(s => s.SomeProperty == someVar).Cast<T>()'
}

但它仍然以相同的方式显示。

谢谢

4

1 回答 1

1

我对您的问题感到非常困惑,但认为这完全与Cast扩展方法有关:

IEnumerable<MyClass> filtered = source.Where(s => s.SomeProperty = someVar).Cast<MyClass>();
于 2013-04-14T10:19:34.547 回答