问题标签 [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.

0 投票
2 回答
611 浏览

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。更多细节在这里。谢谢马克!

0 投票
4 回答
2342 浏览

.net - .Net 使用反射来定义 OfType

我正在使用 System.Reflection 加载在设计时无法加载的类型。我需要在这种类型的集合中提取所有控件,但是,我 OfType 命令似乎不喜欢反射语法。这是我得到的“接近”。

所以那个代码是假的,它不起作用,但你明白我想要做什么。那么有没有办法使用反射并获取该类型的所有控件?

0 投票
4 回答
35183 浏览

c# - LINQ:从类型 T 的列表中,仅检索某个子类 S 的对象

给定一个简单的继承层次结构:Person -> Student, Teacher, Staff

假设我有一个人员列表,L。该列表中有一些学生、教师和工作人员。

使用 LINQ 和 C#,有没有一种方法可以编写一种只能检索特定类型的人的方法?

我知道我可以做类似的事情:

但我希望能够做一些更有活力的事情。我想编写一个方法来检索我能想到的任何类型的 Person 的结果,而不必为每种可能的类型编写方法。

0 投票
1 回答
990 浏览

linq - Queryable.OfType 是如何工作的?

重要问题不是“Queryable.OfType了什么,而是“我在那里看到的代码是如何实现的?”

反思 Queryable.OfType,我看到(经过一些清理):

所以让我看看我是否明白这一点:

  1. 使用反射来获取对当前方法 (OfType) 的引用。
  2. 新建一个方法,就是一模一样的,就是用MakeGenericMethod把当前方法的类型参数改成,呃,一模一样的东西。
  3. 该新方法的参数不是 source,而是 source.Expression。这不是 IQueryable,但我们会将整个内容传递给 Expression.Call,所以没关系。
  4. 调用 Expression.Call,null作为方法(奇怪?) 实例传递,并将克隆的方法作为其参数传递。
  5. 将该结果传递给 CreateQuery 并转换结果,这似乎是整个事情中最明智的部分。

现在,此方法的效果是返回一个表达式,该表达式告诉提供者忽略返回类型不等于 TResult 或其子类型之一的任何值。但我看不到上述步骤实际上是如何实现这一点的。它似乎正在创建一个表示返回 IQueryable<TResult> 的方法的表达式,并使该方法的主体简单地成为整个源表达式,而无需查看类型。是否只是期望 IQueryable 提供程序只会默默地不返回任何不属于所选类型的记录?

那么上面的步骤在某种程度上是不正确的,还是我只是没有看到它们如何导致在运行时观察到的行为?

0 投票
2 回答
2242 浏览

c# - 过滤由OfType设置的Entity中的派生类并获取异常

我正在尝试过滤我的实体中的派生类,但我遇到了异常。

如果我尝试通过 foreach 循环过滤集合,我会遇到异常。

“LINQ to Entities 无法识别方法 'System.Type GetType()' 方法,并且此方法无法转换为存储表达式。”。

我怎样才能克服它?过滤的替代方法是什么?

0 投票
1 回答
1026 浏览

linq - Linq - OfType<> 没有按预期工作

我有以下代码可以检测 Silverlight 应用程序中某个点以下的所有元素

然后将它们过滤为仅属于特定类型的那些-CardButton

即使当我elementsBeneathCursor在调试器中检查时,我可以看到有 2 个类型的元素CardButton 但是当我应用OfType<>过滤器时,结果列表为空

怎么了?

0 投票
2 回答
1304 浏览

c# - List.OfType() 速度,替代数据结构

看看这段代码。

我有大约 100 个装载机,我需要装载很多火车、汽车等。我认为装载机列表非常慢(具有OfType()线性复杂性??),您建议使用什么来代替列表?Dictionary<Type,ILoader>Hashtable<Type,ILoader>HashSet<ILoader>? 例如,使用hashset.OfType<ILoader<Car>>()与 list 相同或更快的速度有多快?

0 投票
2 回答
3665 浏览

c# - 如何使用 OfType<> 过滤到泛型类型的所有变体

我想List<ISeries>使用 OfType<> 使用它们的类型过滤对象。我的问题是,有些对象是通用接口类型,但它们没有自己的通用继承接口。

我有以下定义:

我的列表包含各种ISeries,但现在我只想获取ITraceSeries对象,而不管它们实际定义的泛型类型参数如何,如下所示:

我怎样才能做到这一点?

一个不受欢迎的解决方案是引入一个ITraceSeries继承自的类型ISeries

然后,ITraceSeries用作过滤器。但这并没有真正增加新的信息,只会让继承链更加复杂。

在我看来,这是一个常见问题,但我没有在 SO 或网络上找到有用的信息。感谢帮助!

0 投票
2 回答
12314 浏览

c# - 在 C# 中使用 OfType 过滤类型的对象

我有一个基类 Base,以及从它继承的 A/B 类。

我尝试使用 OfType 过滤我需要的唯一对象,如下所示:

当我编译代码时,我得到了这个错误:

错误 CS0428:无法将方法组“OfType”转换为非委托类型“Base”。您是否打算调用该方法?

代码有什么问题?

0 投票
2 回答
1540 浏览

c# - 在 C# 方法中使用时OfType 的参数

我有这个代码来获得“A”作为过滤结果。

我需要使用IEnumerable<Base> list = new List<Base>() {xbase, a, b};如下函数:

我在'????'中使用什么参数 从原始代码中获得相同的结果?