基本场景是这样的:
class MyBase {}
class MyClassA : MyBase {}
class MyClassB : MyBase {}
class MyClassC : MyBase {}
我有一个被调用的IEnumerable
集合,它实际上包含一个或多个项目的集合。总是只有一个或另一个。MyBase
source
MyClassA
MyClassB
MyClassC
我现在想创建该集合的过滤副本,因此我执行类似于此的操作:
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>()'
}
但它仍然以相同的方式显示。
谢谢