c# - 多态 LINQ 查询

标签 c# linq

让我的 LINQ 查询返回我想要使用的对象类型时有点问题。我非常接近,只需要一点输入。

我有五个表,Objects、People、Locations、Collections 和 CollectionEntries。

Object 是 People、Locations 和 Collections 的基类。集合有许多集合条目,其中可能包含人物、位置和集合的条目。

给定一个特定的集合,我想编写 LINQ 查询来检索该集合中的人员。

到目前为止,我已经有了这个,它返回了一个 CollectionEntries 列表(它们对应于 People 条目,耶!)但我宁愿让它返回 People 的实例。

var people = collection.CollectionEntries.Where( 
  entry => entry.Object is Person ).ToList();

我试过这样做:

var people = collection.CollectionEntries.Where( 
  entry => entry.Object is Person ).OfType<Person>().ToList();

但是它没有返回任何东西。关于如何从我的收藏中获取人物列表的任何建议?

最佳答案

尝试:

var people = collection.CollectionEntries.Where( entry => entry.Object is Person )
                                         .Select(entry => (Person)entry.Object)
                                         .ToList();

var people = collection.CollectionEntries.Where( entry => entry.Object is Person )
                                         .Select(entry => entry.Object)
                                         .Cast<Person>()
                                         .ToList();

它们都应该适用于您的示例。

关于c# - 多态 LINQ 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285209/

相关文章:

c# - 无法构建应用程序安装程序

c# - 适用于 Windows 剪贴板的 C# 代码?

c# - 使用 Parallel for each 获取堆栈溢出异常,这是由于线程安全吗?

c# - 将 datareader 值转换为可空变量

c# - 按日期列出项目数

c# - 如何使用 O(n) 中的 LINQ 根据特定顺序查找第一项?

linq - 嵌套的Linq查询

c# - Linq:如何获取二级节点的值

c# - 组合框下拉位置

linq - 从 List-LINQ 中删除重复项