EntityFrameworkCore.Sqlite - 如何查询包含给定列表所有项目的子列表的实体?

2024-04-03

给定以下模型

public class ApiImageModel
{
    public int ID { get; set; }
    ...
    public List<TagModel> Tags { get; set; } = new();
}

and

public class TagModel
{
    public int ID { get; set; }
    ...
    public string Name { get; set; }
    public List<ApiImageModel> Images { get; set; } = new();
}

如何使用 Linq 基于给定的一组 TagModel 查询 ApiImageModel 列表? 我现在在这个问题上挣扎了一段时间,我当然错过了一些基本的东西,但我无法确定它。

我为 EF6 尝试过这种方法:EF6如何查询children包含列表所有值的位置 https://stackoverflow.com/questions/32004712/ef6-how-to-query-where-children-contains-all-values-of-a-list

像这样,将所有 TagModel-ID 保存在数组“tagIDs”中:

int[] tagIDs;
...
IQueryable<ApiImageModel> images = context.Images.Where(image => tagIDs.All(id => image.Tags.Any(tag => tag.ID == id)));

但视觉工作室奖励我一个“InvalidOperationException”:

The LINQ expression 'DbSet<ApiImageModel>()
    .Where(a => __tagIDs_0
        .All(id => DbSet<Dictionary<string, object>>("ApiImageModelTagModel")
            .Where(a0 => EF.Property<Nullable<int>>(a, "ID") != null && object.Equals(
                objA: (object)EF.Property<Nullable<int>>(a, "ID"), 
                objB: (object)EF.Property<Nullable<int>>(a0, "ImagesID")))
            .Join(
                inner: DbSet<TagModel>(), 
                outerKeySelector: a0 => EF.Property<Nullable<int>>(a0, "TagsID"), 
                innerKeySelector: t => EF.Property<Nullable<int>>(t, "ID"), 
                resultSelector: (a0, t) => new TransparentIdentifier<Dictionary<string, object>, TagModel>(
                    Outer = a0, 
                    Inner = t
                ))
            .Any(ti => ti.Inner.ID == id)))' could not be translated. 

我很高兴获得一些帮助:)


假设你的标签tagIDs是唯一的,您可以执行以下操作:

int[] tagIDs;
var tagCount = tagIDs.Length;
...
var images = context.Images
    .Where(image => image.Tags.Where(tag => tagIDs.Contains(tag.ID)).Count() == tagCount);

这里我们使用Contains抓取我们感兴趣的标签,如果他们Count()等于tagIDs.Length- 所有标签都存在于图像的标签关系中。

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

EntityFrameworkCore.Sqlite - 如何查询包含给定列表所有项目的子列表的实体? 的相关文章

随机推荐

  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp
  • 获取用户最后拍摄的照片

    嘿 我想获取用户通过任何相机应用程序拍摄的最后一张照片 我不知道该怎么做 谁能帮我 此外 我想将该图像作为电子邮件或彩信的附件发送 thanks Find the last picture String projection new Str
  • 在 sails.js 中,如何访问控制器外部的会话变量?

    在控制器中 这很容易 访问会话变量很简单 req session x 1 但是 我如何访问该外部控制器 喜欢服役吗 module exports test function No req session here 您可以创建一个将注册的主控
  • 如何在 IntelliJ 中更改 Maven 的 Java 版本?

    我对 Maven 和 IntelliJ IDEA 都很陌生 我有一个用 Java 8 编写的 Maven 项目 每当我尝试构建它 Maven 项目窗口 gt 生命周期 gt 编译 gt 运行 Maven Build 时 我都会收到一系列编译
  • 保留字行为[重复]

    这个问题在这里已经有答案了 在创建一个基于计数器的小型游戏时 我有一个像这样的数组 var status day dusk night dawn 如果我尝试访问数组的第一个索引 我会得到 console log status 0 yield
  • 对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

    好吧 我一定忽略了一些非常简单的事情 但我迷路了 鉴于这种 object val 1 var foo Int32 val var bar Int64 val 转换为 Int64 会引发 InvalidCastException 我知道这与拳
  • 客户端与服务器术语

    我总是把这两个术语混淆 如何判断哪一方是服务器 哪一方是客户端 是根据发送还是接收数据来决定的 假设连接是单向的 谢谢你 In TCP https en wikipedia org wiki Transmission Control Pro
  • 如何控制png的字体大小?

    我正在尝试为手稿制作图表 该手稿应该用 MS Word 编写 它不接受 pdf 格式的图表 该期刊要求在 Word 文件中嵌入图形的初稿 这些图的分辨率至少为 300 dpi 宽度为 169 毫米或 81 毫米 两列 一列 我注意到 当我将
  • SQL Server 2012。异常:尝试读取或写入受保护的内存(MS.VS.OLE.Interop)

    我更像是 SQL Server 2012 的最终用户 当我右键单击表名称并选择 编辑前 200 行 菜单项时 我收到这条消息 Exception has been thrown by the target of an invocation
  • 发送电子邮件无需密码

    我正在开发一个安卓应用程序 在我的 Android 应用程序中 我有反馈表 我将用户的电子邮件 ID 作为输入 我希望当用户单击提交按钮时应该发送电子邮件 我不希望该用户为此添加他 她的密码 我已经检查了默认方法Intent以及下面链接中的
  • Android 锁密码组合

    我刚刚从我的同事那里听到了这个有趣的问题 我现在正在尝试 但同时我想我可以在这里分享 Android 主屏幕上显示的密码网格中 可能有多少个有效密码 密码最小长度 4 最大 9 如果我错了请纠正我 Summary 4 到 9 个独特数字的完
  • Delphi 7 中的 Soap 信封标头不包括 utf-8 编码。我该如何修改它?

    我在接收来自 Delphi 7 客户端的无效非 ascii 字符时遇到问题 该客户端将 utf 8 编码的 XML 发送到字符串参数中的 C WebService 使用 Net 客户端 可以毫无问题地接收字符 我尝试了很多方法 但似乎都不起
  • 从 Git 远程存储库中删除 .pyc 文件

    不小心 我已将 pyc 文件推送到主存储库 现在我想删除它们 但我做不到 有没有办法直接从 Bitbucket 网站上删除它们 Remove pyc文件使用git rm pyc 如果这不起作用 请使用git rm f pyc Commit
  • 有没有办法避免将 Perl 版本号放入非标准位置的 Perl 模块的“use lib”行?

    我正在尝试将一些 Perl 模块安装到非标准位置 我们称之为 non standard location 我用了 perl Makefile PL PREFIX non standard location make make install
  • 如何检查给定字符串是否是 Windows 下合法/有效的文件名?

    我想在我的应用程序中包含批处理文件重命名功能 用户可以键入目标文件名模式 在替换模式中的一些通配符后 我需要检查它是否是 Windows 下的合法文件名 我尝试使用正则表达式 例如 a zA Z0 9 但它不包括来自各种语言的许多国家特定字
  • 如何从历史记录中永久删除(删除)文件?

    I commited 不推 本地有很多文件 包括删除和添加二进制文件 现在当我尝试推送时需要花费很多时间 实际上我搞乱了我的本地回购历史 以后我怎样才能避免这个错误呢 我可以转换一组本地修订版吗1 gt 2 gt 3 gt 4 to 1 g
  • EntityFrameworkCore.Sqlite - 如何查询包含给定列表所有项目的子列表的实体?

    给定以下模型 public class ApiImageModel public int ID get set public List