问题标签 [oftype]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Linq2SQL 继承类型和 OfType 查询
我有一个使用 Linq2SQL 继承的设置。为了使查询更容易,我也在 DataContext 中公开了派生类型,如下所示:
调用它非常有效,我可以看到 SQL 正在正确生成。支持类型是 DataQuery<T>。
当我将此 IEnumerable 分配给数据源(控件或 BindingSource)时,问题就出现了。
从我所见,DataQuery 对象被查询为 IListSource。它很乐意提供这个。然后它继续创建一个 BindingList,由于提供的 2 个参数(IEnumerable<Derived> 和 Table<Base>)的类型参数不匹配,该 BindingList 失败。由于找不到构造函数,它会引发 MissingMethod 异常。
简单的解决方法是在分配给数据源之前在 IQueryable<Derived> 上调用 ToList() ,然后它就可以工作了,但这很累人。
有什么建议可以在不“丢失” IQueryable 的情况下处理这个问题?
谢谢
雷比
更新:
该错误现已报告给 MS。更多细节在这里。谢谢马克!
.net - .Net 使用反射来定义 OfType
我正在使用 System.Reflection 加载在设计时无法加载的类型。我需要在这种类型的集合中提取所有控件,但是,我 OfType 命令似乎不喜欢反射语法。这是我得到的“接近”。
所以那个代码是假的,它不起作用,但你明白我想要做什么。那么有没有办法使用反射并获取该类型的所有控件?
c# - LINQ:从类型 T 的列表中,仅检索某个子类 S 的对象
给定一个简单的继承层次结构:Person -> Student, Teacher, Staff
假设我有一个人员列表,L。该列表中有一些学生、教师和工作人员。
使用 LINQ 和 C#,有没有一种方法可以编写一种只能检索特定类型的人的方法?
我知道我可以做类似的事情:
但我希望能够做一些更有活力的事情。我想编写一个方法来检索我能想到的任何类型的 Person 的结果,而不必为每种可能的类型编写方法。
linq - Queryable.OfType 是如何工作的?
重要问题不是“Queryable.OfType做了什么,而是“我在那里看到的代码是如何实现的?”
反思 Queryable.OfType,我看到(经过一些清理):
所以让我看看我是否明白这一点:
- 使用反射来获取对当前方法 (OfType) 的引用。
- 新建一个方法,就是一模一样的,就是用MakeGenericMethod把当前方法的类型参数改成,呃,一模一样的东西。
- 该新方法的参数不是 source,而是 source.Expression。这不是 IQueryable,但我们会将整个内容传递给 Expression.Call,所以没关系。
- 调用 Expression.Call,
null
作为方法(奇怪?)实例传递,并将克隆的方法作为其参数传递。 - 将该结果传递给 CreateQuery 并转换结果,这似乎是整个事情中最明智的部分。
现在,此方法的效果是返回一个表达式,该表达式告诉提供者忽略返回类型不等于 TResult 或其子类型之一的任何值。但我看不到上述步骤实际上是如何实现这一点的。它似乎正在创建一个表示返回 IQueryable<TResult> 的方法的表达式,并使该方法的主体简单地成为整个源表达式,而无需查看类型。是否只是期望 IQueryable 提供程序只会默默地不返回任何不属于所选类型的记录?
那么上面的步骤在某种程度上是不正确的,还是我只是没有看到它们如何导致在运行时观察到的行为?
c# - 过滤由OfType设置的Entity中的派生类并获取异常
我正在尝试过滤我的实体中的派生类,但我遇到了异常。
如果我尝试通过 foreach 循环过滤集合,我会遇到异常。
“LINQ to Entities 无法识别方法 'System.Type GetType()' 方法,并且此方法无法转换为存储表达式。”。
我怎样才能克服它?过滤的替代方法是什么?
linq - Linq - OfType<> 没有按预期工作
我有以下代码可以检测 Silverlight 应用程序中某个点以下的所有元素
然后将它们过滤为仅属于特定类型的那些-CardButton
即使当我elementsBeneathCursor
在调试器中检查时,我可以看到有 2 个类型的元素CardButton
但是当我应用OfType<>
过滤器时,结果列表为空
怎么了?
c# - List.OfType() 速度,替代数据结构
看看这段代码。
我有大约 100 个装载机,我需要装载很多火车、汽车等。我认为装载机列表非常慢(具有OfType()
线性复杂性??),您建议使用什么来代替列表?Dictionary<Type,ILoader>
或Hashtable<Type,ILoader>
或HashSet<ILoader>
? 例如,使用hashset.OfType<ILoader<Car>>()
与 list 相同或更快的速度有多快?
c# - 如何使用 OfType<> 过滤到泛型类型的所有变体
我想List<ISeries>
使用 OfType<> 使用它们的类型过滤对象。我的问题是,有些对象是通用接口类型,但它们没有自己的通用继承接口。
我有以下定义:
我的列表包含各种ISeries
,但现在我只想获取ITraceSeries
对象,而不管它们实际定义的泛型类型参数如何,如下所示:
我怎样才能做到这一点?
一个不受欢迎的解决方案是引入一个ITraceSeries
继承自的类型ISeries
:
然后,ITraceSeries
用作过滤器。但这并没有真正增加新的信息,只会让继承链更加复杂。
在我看来,这是一个常见问题,但我没有在 SO 或网络上找到有用的信息。感谢帮助!
c# - 在 C# 中使用 OfType 过滤类型的对象
我有一个基类 Base,以及从它继承的 A/B 类。
我尝试使用 OfType 过滤我需要的唯一对象,如下所示:
当我编译代码时,我得到了这个错误:
错误 CS0428:无法将方法组“OfType”转换为非委托类型“Base”。您是否打算调用该方法?
代码有什么问题?
c# - 在 C# 方法中使用时OfType 的参数
我有这个代码来获得“A”作为过滤结果。
我需要使用IEnumerable<Base> list = new List<Base>() {xbase, a, b};
如下函数:
我在'????'中使用什么参数 从原始代码中获得相同的结果?