如何在实体框架查询中初始化空列表?

2023-12-22

我已将列表字段添加到我的业务模型中。它尚未存储在数据库中,我希望用如下所示的内容临时映射它:

return MyContext.Foos.Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new List<string>()
    }).ToList();

但是,实体框架抱怨它无法在 LINQ to Entities 查询中实例化新列表:

无法在 LINQ to Entities 查询中初始化实现 IEnumerable 'System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' 的类型。

基本上,List<string>是一个复杂类型,虽然它包含默认构造函数,但构造函数需要在使用列表之前运行一些初始化代码。实体框架只是不理解如何从 SQL 方面生成空列表。

我还尝试使用空数组达到相同的结果:

return MyContext.Foos
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new string[0]
    }).ToList();

LINQ to Entities 不支持 LINQ 表达式节点类型“NewArrayBounds”。

同样,实体框架不支持该表达式,尽管它要简单得多。所以我尝试了最简单的表达式,对于一个新数组:

return MyContext.Foos
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = { }
    }).ToList();

在构造函数和初始值设定项中,LINQ to Entities 仅支持属性或字段参数绑定。

我知道一种替代方法是先将所有对象加载到内存中,然后通过 C# 初始化列表:

return MyContext.Foos.ToList()
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new List<string>()
    }).ToList();

然而,这似乎是一种解决方法,而不是实际的解决方案。如果我不想重新迭代集合,如何初始化列表?


令人惊讶的是,虽然new string[0] and { }不工作,new string[] { } and new string[0] { } do!

return MyContext.Foos.ToList()
    .Select(foo=> new Foo
    {
        Id = foo.Id,
        Name = foo.Name,
        RequiredFeatures = new string[] { }
    }).ToList();

但是,这确实有一个警告,即您无法将项目添加到列表中,因为它是由数组而不是实际列表支持的。它们在功能上似乎都是相同的,我不确定为什么实体框架支持某些而不支持其他。

空集合

支持的:

  • new string[] { }
  • new string[0] { }

不支持:

  • { }
  • new string[0]
  • new List<string>()
  • new List<string> { }
  • new List<string>() { }

非空集合

支持的:

  • new [] { "foo" }
  • new string[] { "foo" }
  • new string[1] { "foo" }
  • new List<string> { "foo" }
  • new List<string>() { "foo" }

不支持:

  • { "foo" }

有趣的是,实体框架支持包含值的列表,但不支持空列表。

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

如何在实体框架查询中初始化空列表? 的相关文章

随机推荐

  • Linux 上的 matlab 无法绘制任何内容(无法加载 libstdc++.so.6:找不到版本“CXXABI_1.3.8”)

    我在 Fedora 24 上运行 matlab R2016a 但无法使用绘图命令 这是我得到的错误 Error using gca While setting the Parent property of Axes Can t load u
  • 通过转换运算符进行模板参数类型推导

    我看到 C 11 标准中的示例 n3337 14 8 2 3 7 struct A template
  • LNK 2022:迁移到 VS2010 后布局信息不一致

    我有一个 VS2010 解决方案 其中包含 除其他外 以下项目 Native DLL 静态链接到第三方库 ITK 的本机 C 项目 其中包括 STL 伪代码 非常简化 using namespace std bool Native Calc
  • 在 Haskell 中调试/可视化递归函数调用的最简单方法?

    我正在学习 Haskell 我决定实现这个简单的算法来完成插入排序算法的一部分 while j gt 0 and A j 1 gt A j swap A j and A j 1 j j 1 end while 我确实是这样的 miniSor
  • 在 ionic 中创建一个表

    我需要在 Ionic 中创建一个表 我想过使用 Ionic grid 但无法实现我想要的 我怎样才能做到这一点 这是与我想要的类似的图像 我可以使用它 但是如何像图片中那样划分行 div class list div class item
  • MariaDB JDBC 客户端日志记录

    有没有办法记录查询in java使用 MariaDB jdbc 驱动程序 对于 MySQL 驱动程序 我正在使用 profileSQL true logger com mysql jdbc log Slf4JLogger 在开发机器上记录查
  • 运行 iOS 8.3 的 iPhone 在 Xcode 6.2 中显示为不合格

    当前设置 iPhone 6 更新至 iOS 8 2 使用 Xcode 6 2 运行 Mavericks 10 9 的 iMac 部署目标设置为 8 2 当我连接 iPhone 时 它 显示为不合格 此外 它还显示此警告 我试过了 重新启动
  • 在多台计算机上使用 Android 模拟器映像

    我创建了 Android 的自定义版本 并将其作为模拟器映像在开发计算机上运行 我需要能够在另一台运行 Windows 的计算机上使用该映像 它是在 Mac 上构建的 我找到了模拟器使用的图像文件 ramdisk img userdata
  • 适合新手的排序算法

    所以 Net 和 Java 已经把我宠坏了 我不需要 被要求 学习任何排序算法 但现在我需要用不同的语言对数组进行排序 但没有这种奢侈 我能够毫无问题地学习冒泡排序 然而 一些消息来源讨厌使用冒泡排序 因为它在 n 2 比较的平均和最坏情况
  • 如何获取特定Python模块中的变量列表?

    假设我有以下文件结构 data py foo bar abc def core py import data do something here a print a foo bar abc 我需要获取 data py 文件中定义的所有变量
  • 从实体框架中检索没有 ONE 字段的对象

    我正在使用实体框架来连接数据库 我有一个小问题 我有一张表 其中有一个 varbinary MAX 列 带有文件流 我使用 SQL 请求来管理 数据 部分 但使用 EF 来管理其余部分 文件的元数据 我有一个代码必须获取文件的所有文件 id
  • 如何为任何 Android 设备安装 ADB 驱动程序?

    我是一名安卓开发者 我有一部新的 HTC Inspire 4g 手机 但我不知道如何为其安装 USB 驱动程序 这是我的 android winusb inf 文件 Android WinUsb driver installation Ve
  • Hadoop Pig:传递命令行参数

    有没有办法做到这一点 例如 传递要处理的文件的名称等 这出现在另一个问题 https stackoverflow com questions 3515481 pig latin load multiple files from a date
  • 如何使活动窗口始终位于顶部

    我想创建一个始终位于其他活动顶部的活动 如 Windows 中的模式窗口或任务管理器 我如何在 Android 上执行此操作 谢谢 您可以在 Activity 的重写 onStop 方法中使用以下代码 Override protected
  • 使用代码隐藏从 XAML 访问变量并从 ViewModel 访问对象

    我是 Windows Phone 开发的新手 我想问一下这个场景是否可以实现 我需要使用后面的代码访问 XAML 中的变量 然后将其作为项目添加到视图模型中找到的现有列表中 因此 我需要访问视图模型以获取列表 并访问 XAML 以从资源中获
  • GDAL 未链接

    我正在尝试让我的程序在 Windows 上运行 它依赖于GDAL 一个用于加载GIS数据的库 它在 Linux 和 macOS 上都能很好地编译和链接 我将 CMake 与 MinGW 一起使用 并且遇到了如下链接错误 undefined
  • Objective-C:向类别添加属性

    我已经为 NSDate 构建了一个类别 我想在这个类别中封装一个属性来保存一些数据 但我无法实现添加此属性 只能添加方法 有什么办法可以实现这一点吗 谢谢 这里有一些代码 文件名 NSObject dictionary h import
  • Android ScrollView 滚动条大小

    我正在使用 ScrollView 我想设置 ScrollBar 大小 但我尝试的一切都失败了 我尝试使用属性 android scrollbarSize 样式 主题 但什么也没有 滚动条的大小始终相同 有什么建议么 谢谢 我尝试过这个
  • 使用 Jackson 序列化 java 对象时维护子类型信息,而不使用包装类

    我正在尝试使用 Jackson 在 Java 中的 JSON 文件和具有两个子类的抽象类之间进行转换 理想情况下 我想使用如下 JSON 没有包装器的 Json 文档 type lion name Simba endangered true
  • 如何在实体框架查询中初始化空列表?

    我已将列表字段添加到我的业务模型中 它尚未存储在数据库中 我希望用如下所示的内容临时映射它 return MyContext Foos Select foo gt new Foo Id foo Id Name foo Name Requir