使用 RavenDB 和 LINQ 查找至少包含子集中一个元素的对象

2024-06-24

我有简单类型Question:

public class Question
{
    public Question(string id)
    {
        Id = id;
        Tags = new List<string>();
    }

    public string Id { get; private set; }
    public IList<string> Tags { get; set; }            
}

我定义了此类问题的样本集合:

var q1 = new Question("q1") { Tags = new List<string>() {"a"} };
var q2 = new Question("q2") { Tags = new List<string>() {"b"} };
var q3 = new Question("q3") { Tags = new List<string>() {"a", "b", "c"} };
var q4 = new Question("q4") { Tags = new List<string>() {"a", "b"} };
var q5 = new Question("q5") { Tags = new List<string>() {"z"} };
var q6 = new Question("q6");
var questions = new List<Question>() {q1, q2, q3, q4, q5, q6};

现在我需要找到来自给定子集的所有问题,其中至少包含一个标签。子集定义如下:

string[] tags = new[] {"a", "b"};

我预计q1, q2, q3 and q4被退回。我用来获得所需结果的查询是:

var questions = DocumentSession.Query<Question>().AsQueryable();
questions = GetQuestionsToContainingAtLeastOneTagFromSubset(questions, tags)
// some other query restrictions
var result = questions.ToList(); // (**)

假设对我的集合施加限制的函数如下:

private IQueryable<Question> GetQuestionsToContainingAtLeastOneTagFromSubset(IQueryable<Question> questions, IEnumerable<string> tags)
{
    var result = new List<Question>();
    foreach (var tag in tags)
    {
        var currentTag = tag;
        var resultForTag = questions.Where(x => x.Tags.Any(xTag => xTag == currentTag));
        result = result.Concat(resultForTag).ToList();
     }
     return result.GroupBy(x => x.Id).Select(grp => grp.First()).AsQueryable();
}

我认为这是非常低效的。我想避免使用.ToList()在提供的函数内。据我了解.ToList()表达式查询 RavenDB 并返回部分结果(顺便说一句:我对吗?)。这效率不高。我只想在提供的函数中施加限制,并在施加所有限制后执行查询。这(**)这个地方很适合我将批次发送到 RavenDB 检索查询结果。

该如何改进呢?


您可以查询 lucene 以获取带有与您的标签数组相匹配的标签的问题,如下所示:

string[] tags = new[] { "a", "b" };
string queryRange = "(" + string.Join(" OR ", tags) + ")";

var res = session.Advanced.LuceneQuery<Question>()
               .Where("Tags:" + queryRange).ToList();

请注意,这会查询整个索引问题,而不是子集。但我认为您可以将 - 我猜 - 附加到查询字符串表达式。 有关此类查询的更多信息,请参阅 Lucene 文档:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/queryparsersyntax.html http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/queryparsersyntax.html

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

使用 RavenDB 和 LINQ 查找至少包含子集中一个元素的对象 的相关文章

  • 如何从 std::vector 中删除元素而不调整其大小

    迭代器擦除 迭代器位置 迭代器擦除 首先是迭代器 迭代器最后 擦除元素 从向量中删除 容器可以是单个元素 位置 或一系列元素 第一个 最后一个 这有效地减少了向量 大小除以元素数量 删除 调用每个元素的 之前的析构函数 and remove
  • 外部剃刀视图看不到外部模型

    我对外部剃刀视图有疑问 在我的项目中 我有主 mvc Web 程序集和动态加载的外部类库程序集 来自 DB 及其自己的控制器 视图和模型 这些程序集在运行时不会直接引用和加载 我能够通过为控制器创建自定义控制器工厂 为视图创建自定义虚拟路径
  • C# Visual Studio 动态代码片段

    我正在开发一个 WinForms 项目 每天都会执行一些重复性的任务 所以我认为创建代码片段 https msdn microsoft com en us library ms165394 v vs 110 aspx会帮助我 但它仅适用于固
  • 在 C/C++ 中绘制填充椭圆的简单算法

    在SO上 找到了以下绘制实心圆的简单算法 for int y radius y lt radius y for int x radius x lt radius x if x x y y lt radius radius setpixel
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 命令中带空格的 Windows C 系统调用

    我无法使用名称和参数中的空格进行系统调用 例如 system c program files something example exe c my files example txt 我尝试过各种我知道的方法来逃避 但没有任何效果 我努力了
  • 如果 .txt 文件不存在,则创建一个,如果存在则追加新行

    我想创建一个 txt 文件并写入它 如果该文件已经存在 我只想添加更多行 string path E AppServ Example txt if File Exists path File Create path TextWriter t
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 持续运行的 C# 代码 - 服务还是单独的线程?

    我有一个 NET 4 Web 应用程序 它有 3 个关联的独立项目 DAL BAL 和 UI 我正在使用实体框架进行数据库交互 我有代码循环遍历一堆数据库数据 根据找到的内容调用方法 然后更新数据库 我希望这段代码一直运行 同时 我希望用户
  • 如何“全局”捕获对象实例中引发的异常

    我目前正在编写一个 winforms 应用程序 C 我正在使用企业库异常处理块 遵循我所看到的相当标准的方法 IE 在 Program cs 的 Main 方法中 我已将事件处理程序连接到 Application ThreadExcepti
  • OpenMP 循环数组访问中的错误共享

    我想利用 OpenMP 来并行执行我的任务 我需要将数组的所有元素减去相同的数量并将结果写入另一个向量中 两个数组都是动态分配的malloc第一个填充了文件中的值 每个元素都有类型uint64 t pragma omp parallel f
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • WPF MVVM后台打印数据绑定问题

    我正在使用 wpf mvvm 开发一个销售点应用程序 在交易生命周期的许多阶段 都会在后台打印收据 我已经使用其他示例在后台生成和打印收据 我正在后台打印一个 UserControl 一切看起来都很棒 然后 我为该控件创建了 ViewMod
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst
  • 没有类型的 IEnumerable 属性

    我正在尝试创建一个类似于来自 MSDN 的官方 DataGrid ItemsSource 的属性 public IEnumerable ItemsSource get set 这提供了对任何派生类中任何类型的支持 有了这个 我可以设置类似的
  • 是否可以在 Eclipse 中为除 Java 之外的 Eclipse 编写插件?

    谁能帮我用c 写一个eclipse插件 weekens 和 celavek 感谢您提供的信息 我正在研究 JNI 并将尝试实现它 celavek 我们必须做什么样的主控 控制 在C 和java接口中处理是否风险更大 我的要求是在 Java
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • 自动化 WinDBG 或以其他方式从转储文件中提取信息?

    假设我有一个进程的内存转储 我想对其运行报告 所以本质上我想打开 WinDBG 加载 SOS 并运行一个脚本 该脚本运行一些命令 解析输出 然后基于该结果运行更多命令 除了像 SendKeys 这样的黑客行为之外 还有没有办法自动化 脚本化
  • 从不同的线程访问对象

    我有一个服务器类 它基本上等待来自客户端的连接 在该类中 我创建了一个 NetworkStream 对象 以便能够从客户端接收字节 由于 NetworkStream Read 方法不是异步的 这意味着它将等到从客户端读取字节才能继续执行类似

随机推荐

  • 使用ngx-print打印图像的问题

    图像未使用 ngx print 打印 我不确定我在这里做错了什么 HTML
  • 检查 pyspark df 列的值是否存在于其他 pyspark df 列中

    我有 2 个 pyspark 数据帧 我想检查一列的值是否存在于另一个数据帧的列中 我只看到了如何过滤存在的值的解决方案 像这样 https stackoverflow com questions 41775281 filtering a
  • 打印泰语

    我有一个使用 ESC POS 将收据打印到收据打印机的应用程序 它需要支持泰语 当我尝试打印泰语时 一些字符被分开 如下图所示 这是我的代码 printMSG Command ESC t Command DecimalToCharStrin
  • 哈希函数何时彼此正交?

    哈希函数何时彼此正交 您能提供一个 Java 中两个彼此正交的哈希函数的示例吗 From 正交哈希函数 两个哈希函数h1和h2是正交的 如果对于所有状态 s s S 且 h1 s h1 s 且 h2 s h2 s 我们有 s s S Ede
  • Doctrine2 命名查询

    我在 Doctrine2 中找不到任何有关命名查询的文档 请帮忙 Doctrine2 有命名查询功能吗 您可以使用 命名查询 DQL 例子 use Doctrine ORM Mapping NamedQuery use Doctrine O
  • 使用 AVAssetWriter 录制视频时获取视频的持续时间

    我有一堂课将视频和音频录制到 mp4 文件中 我用AVAssetWriter AVAssetWriterInput做这样的任务 使用这种方法录制视频时如何获取视频的持续时间 AVAssetWriter 开始startSession时可以节省
  • 如果等于特定值则替换列

    我希望替换 CSV 中的第四列 如果它等于 N A 我正在尝试将其更改为 1 我似乎无法让它发挥作用 awk F if 4 N A 4 1 test csv 您可以使用以下内容awk awk F 4 4 N A 1 4 1 OFS test
  • 在 Laravel 4 路由中接受编码的 URL

    我正在 Laravel 4 Beta 5 中开发一个网站 我试图将编码的 URL 传递到路由器 问题是 编码的 URL 中包含百分比等 因此它被 Laravel 阻止 URL 使用 Javascript 函数进行编码encodeURICom
  • 在 Android 模拟器中访问 google api 时出现运行时错误

    我正在尝试访问 googleFit API 看起来很简单 获取谷歌登录权限和所需的授权 然后查询步数 我的代码似乎不起作用 当我调试它时 fitnessOption声明部分抛出 源代码与字节码不匹配 错误 我清理了我的项目 重建它但不起作用
  • 如何在使用 Android Paging 3 库时显示空视图

    我正在使用 Paging 3 库 我可以检查刷新状态是否为 正在加载 或 错误 但我不确定如何检查 空 状态 我可以添加以下条件 但我不确定其条件是否正确 adapter loadStateFlow collectLatest loadSt
  • ExcelDna F# 和可选参数

    对于标量 即非类似数组 可选参数 我将使用以下模式
  • 如果我在计算强连通分量时不使用 G 转置会怎样?

    我正在阅读算法导论 在 22 5 强连通分量中 算法 STRONGLY CONNECTED COMPONENT G 定义为 调用 DFS G 计算每个顶点 u 的完成时间 u f 计算 G 转置 调用 DFS G transpose 但在
  • 如何给 Git 控制台着色?

    我最近看到gitWindows 中的控制台是彩色的 例如绿色表示添加 红色表示删除等 我如何为我的颜色上色git这样的控制台 为了安装它 我使用了以下命令 sudo apt get install git core As noted htt
  • 如何让浏览器或 PHP 缓存 fetch() 请求?

    这基本上是相反的fetch 如何发出非缓存请求 https stackoverflow com questions 29246444 fetch how do you make a non cached request 假设我们有客户端 d
  • 用于生成和使用 JSON 的控制器的 Spring RequestMapping

    具有多个消费和生产的 Spring 控制器application json 我的代码充满了长注释 例如 RequestMapping value foo method RequestMethod POST consumes MediaTyp
  • ASP.NET MVC - 服务层,每个控制器操作中的单个或多个服务?

    我开始在我的 MVC 项目中实现一个服务层 以精简一些臃肿的控制器 它也有存储库 工作单元模式 我的问题是 如果您的页面有一个复杂的视图模型 其中包含大量子对象等 并且在幕后有大量逻辑发生 让您了解原始开发人员编写的控制器有近 4000 行
  • 检查NLog中是否发生日志事件

    我正在尝试检查我的应用程序中是否发生了日志事件 以及它是否执行了某些操作 我已经检查了所有地方 似乎找不到任何有关日志事件是否发生的信息 private static Logger logger LogManager GetCurrentC
  • 如何处理 Android MediaCodec 解码器的第一个输出 ByteBuffer?

    我正在尝试使用 Android 的 MediaCodec 套件编写音频重采样器 我目前正在将 MP3 立体声音频文件输入 MediaExtractor 然后由 MediaCodec 进行解码 源音频的采样率为48000 我不明白的是我从解码
  • Python 的“with”是一元吗?

    像我之前的许多鲁莽的先驱者一样 我正在努力穿越理解单子这片无路可走的荒原 我仍然在蹒跚学步 但我不禁注意到 Python 的某种类似 monad 的品质with陈述 考虑这个片段 with open input filename r as
  • 使用 RavenDB 和 LINQ 查找至少包含子集中一个元素的对象

    我有简单类型Question public class Question public Question string id Id id Tags new List