使用带有判别器的 C# MongoDB LINQ

2023-12-26

我有一个 MongoDB 集合,包含三个不同类(A、B、C)的文档,它们都继承自公共类 D。

使用官方 C# 驱动程序,我插入了所有三种类型(A、B、C)的文档,并且它们都通过 _t 鉴别器正确显示,并且在我的代码中注册了它们的类映射。

如果我发出如下所示的 LINQ 查询(使用 VB):

dim Result = database.GetCollection("mycol").AsQueryable(Of C).Where(some where clause)

如果我计算这个结果,我会收到错误“元素‘来自 A 类的元素名称’与 C 类的任何字段或属性不匹配。”

鉴别器不是要在此处启动吗?AsQueryable(Of C)代码?看来当我发出.Count我的Where 子句特定于C 类的元素,它应用于A、B 和C 的文档。

我尝试过添加.OfType(Of C)没有效果,尝试先转换为列表.ToList,但我仍然遇到同样的错误。有任何想法吗?

作为背景,我的客户端代码通常会处理 D 类型的对象。A、B、C 共享许多从 D 继承的公共属性,我想在这些属性上放置索引,因此我将它们放在一个集合中。但是,有时在特殊情况下我需要直接引用 A、B 或 C 类型的对象。


使用多态类型层次结构时,您的集合变量和 LINQ 查询应从基类开始。例如,要从数据库中读回类型 A 的所有文档,您可以编写:

var collection = database.GetCollection<D>("mycol");
var query = collection.AsQueryable<D>().OfType<A>();
foreach (var a in query)
{
    // process document of type A
}

出于诊断目的,您可以使用以下命令查看相应的本机 MongoDB 查询:

var json = ((MongoQueryable<A>)query).GetMongoQuery().ToJson();

请注意,您必须将查询转换为 MongoQueryable (不是 MongoQueryable),因为 OfType() 调用更改了 IQueryable 的类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用带有判别器的 C# MongoDB LINQ 的相关文章

  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 当一组凭据下的计划任务启动的进程在另一组凭据下运行另一个程序时,Windows 是否有限制

    所以我有一个简单的例子 其中我有应用程序 A 它对用户 X 本地管理员 有一些硬编码的凭据 然后它使用硬编码的绝对路径启动带有这些凭据的应用程序 B A 和 B 以及 dotnet 控制台应用程序 但是它们不与控制台交互 只是将信息写入文件
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • GCC 的“-Wl,option”和“-Xlinker option”语法之间有区别吗?

    我一直在查看一些配置文件 并且看到它们都被使用 尽管在不同的体系结构上 如果您在 Linux 机器上使用 GCC 将选项传递给链接器的两种语法之间有区别吗 据我所知 阅读 GCC 手册时 他们的解释几乎相同 From man gcc Xli
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数

随机推荐

  • jQuery 更改 iFrame 的内容

    我对使用 jQuery 完全陌生 为什么这不起作用 your browser needs to be updated 另外 我计划使用此 iFrame 向用户展示 html 文件更改的预览 我将在
  • Scala - 循环案例类名称以用作类型参数

    我在 Scala 代码 Scala 2 13 中有一个这样的函数 可以与 Spark 一起使用 def getDataset T lt Product TypeTag name String Dataset T import spark i
  • 运行TFS构建服务(NT AUTHORITY\NETWORK SERVICE)的帐户需要在发布管理服务器中添加为系统用户

    当我尝试从我的构建中触发发布时 我收到上述错误 构建可以自行运行 发布也可以自行运行 但我无法触发发布 我的问题是发布管理中没有系统用户这样的东西 存在一个服务用户 将上述用户设置为服务用户 它还被设置为发布管理器 它还位于 TFS 中的
  • 具有类型安全实现的 Java 泛型接口

    我正在寻找从通用框架调用特定接口的良好替代方案 我用代码来举例说明 看看问题部分 包含示例代码主要是为了彻底性 并将示例应用到实际场景中 Example 假设我们想要基于组件列表构建报告 假设我们有两种特定的组件类型 public inte
  • 使用 RxJS Observable 传输 JSON

    我正在尝试了解有关 RxJ 的一些事情 我想要做的是使用一些 JSON 数据 并在数据传入时立即开始在 DOM 上呈现该数据 我已经设置了流请求 响应和显示 它的输出一切都很好 但它是一次性完成的 而不是随着时间的推移 我想开始在页面上显示
  • 设置-webkit-transform并使用JS进行转换

    我正在尝试使用 jQuery 更改元素的 transform css 属性 myBlock css webkit transform rotate angle deg myBlock css moz transform rotate ang
  • 如何手动指定 X-Cloud-Trace-Context 标头值并关联和跟踪单独的 Cloud Run 请求中的日志?

    我正在使用 Cloud Run 和 Cloud Tasks 对 Webhook 进行一些异步处理 当我收到对 Cloud Run 服务的请求时 我会在 Cloud Tasks 队列中对任务进行排队 并立即从服务返回响应 然后 云任务将再次触
  • 为什么 django 不使用带有日期模板标记的 SHORT_DATE_FORMAT?

    当我为日期模板标记指定 SHORT DATE FORMAT 时 我很难理解为什么 django 不在模板中使用我的 SHORT DATE FORMAT 我的设置是 TIME ZONE Australia Melbourne SHORT DA
  • Go 中从 C 调用的整数除法

    我可以通过这个程序在 go 中执行整数除法 package main import fmt func main a 10 b 5 fmt Println a b 然后我用 go 编写了一个程序 其中包含 和 的函数 我用 C 编写了一个程序
  • 错误:非法重新分配导入

    我正在尝试将模块导入到打字稿文件中 然后与 Rollup js 捆绑在一起 但我收到一条错误消息 导致 Rollup 无法完成 进口 import as mapboxgl from mapbox gl mapboxgl as any acc
  • 如何扩展 JSX.IntrinsicElements['div']? TS2499

    我怎么可以通过创建一个新类型JSX IntrinsicElements div X但我不能延长它 我不明白错误消息 我不是简单地添加了一个 可选类型 吗 这两种不同的方式扩展类型有什么区别 对我有用的是预先定义类型 type SpanPro
  • Facebook 嵌入视频的 OpenGraph 遇到的困难

    我在实施通过研究找到的解决方案时遇到了一些困难here https stackoverflow com a 17811187 1467082 实际接受的答案没有帮助 已被投给玻利维亚 Problem Facebook 似乎无法识别我添加到标
  • 如何通过我的应用程序向服务器发送反馈信息?

    在我的应用程序中将使用反馈表 我必须将反馈信息发送到服务器 请帮助我如何在 Windows Phone 中将信息发送到服务器 您可以使用 EmailTask var emailTask new EmailComposeTask To ema
  • 计算字符串中所有字符的函数 - C++

    我想用C 写一个函数 计算字符串中的所有字符 我有一个名为 input 的字符串 程序的用户可以在其中输入一个句子 我将重要的字母存储在字符串字母表中 如下所示 string alphabet ABCDEFGHIJKLMNOPQRSTUVW
  • Xcode 8 无法启动:加载插件失败

    我的 Xcode 8 有一个大问题 无法启动 我总是收到以下错误 加载插件失败 该插件或其必备插件之一可能丢失或 已损坏 可能需要重新安装 我查看日志 发现问题出在 Python 所以我尝试更新 Python 重新安装 但没有什么问题 T
  • 可以通过 ISNUMERIC 函数过滤 Spark 数据帧吗?

    我有一个DataFrame对于 SQL 中的表 我想过滤这个DataFrame某一列的值是否为数字 val df sqlContext sql select from myTable val filter df filter ISNUMER
  • C++ - 如何从同一类的静态函数访问类的私有成员?

    我拥有的 所以我有一个带有私有成员和静态函数的类 该函数必须确实是静态的 我无法更改它 我想要的是 我需要从静态函数访问私有成员 有任何想法吗 请检查以下代码 class Base private int m member public B
  • 如何在 SQL 中将 Float 转换为 Varchar

    我正在做这个 declare num float 7708369000 select num as float convert varchar num as varchar 它给了我这个 float varchar 7708369000 7
  • 如何按 DESC 或 ASC 对 varchar 数字列进行排序?

    我写的 ORDER BY column ASC 但我的专栏是VARCHAR它有点像错误的1 10 2 代替1 2 10 我怎样才能做到像这样排序1 2 10 order by cast column as float Notes 假设您的列
  • 使用带有判别器的 C# MongoDB LINQ

    我有一个 MongoDB 集合 包含三个不同类 A B C 的文档 它们都继承自公共类 D 使用官方 C 驱动程序 我插入了所有三种类型 A B C 的文档 并且它们都通过 t 鉴别器正确显示 并且在我的代码中注册了它们的类映射 如果我发出