Entity Framework Core:以字符串作为参数从动态表中获取列表

2024-03-05

我有一个动态变量,它可以是我的数据库中每个表的名称。

这是我想要获取的数据的示例

var tableData = _context.Users.ToList();

But the Users应作为字符串传入。

我尝试过的:

// Exception: System.InvalidOperationException: 'Cannot create a DbSet for 'object' because this type is not included in the model for the context.'
var tableData = _context.Set<object>().FromSqlRaw($"SELECT * FROM {tableName}").ToList();

// Returned -1
var tableData = _context.Database.ExecuteSqlRaw($"SELECT * FROM {tableName}");

收到数据后,我调用以下函数来获取 a 的字节.CSV file.

public byte[] ExportToCsv<T>(IEnumerable<T> data)
{
    using var memoryStream = new MemoryStream();
    using var streamWriter = new StreamWriter(memoryStream);
    using var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture);

    csvWriter.WriteRecords(data);
    streamWriter.Flush();

    return memoryStream.ToArray();
} 

我该如何解决这个问题?

使用 Microsoft.EntityFrameworkCore.SqlServer 7.0.5(最新)


您将需要使用非通用DbContext.Set函数,并使用非泛型IEnumerable界面

public IEnumerable GetData(Type typeOfTable)
{
    return _context.Set(typeOfTable);
}

在 EF Core 中,此函数不可用,因此您需要反射来调用通用函数。

public IEnumerable GetData(Type typeOfTable)
{
    var mthd = _context.GetType().GetMethods().FirstOrDefault(m =>
        m.Name == "Set" && m.GetParameters().Length == 0);
    var genericMthd = mthd.MakeGenericMethod(typeOfTable);

    return (IEnumerable)genericMthd.Invoke(_context, null);
}

然后您需要将其传递到 CSV 函数中。

它没有正确处理写入器的刷新。这是更正后的代码,请注意,编写器已完全处理,但设置为保持流打开。

public byte[] ExportToCsv(IEnumerable data)
{
    using var memoryStream = new MemoryStream();

    using (var streamWriter = new StreamWriter(memoryStream, leaveOpen: true))
    using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture, leaveOpen: true))
    {
        csvWriter.WriteRecords(data);
    }
    return memoryStream.ToArray();
}

请注意,使用ToArray效率低下:理想情况下,您只需倒带流并将其传回,而不是新的byte[]大批。如果您打算最终将其写入文件或网络响应,则更是如此。

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

Entity Framework Core:以字符串作为参数从动态表中获取列表 的相关文章

  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • 如何最好地以编程方式将 `__attribute__ ((unused))` 应用于这些自动生成的对象?

    In my makefile我有以下目标 它将文本 HTML 资源 编译 为unsigned char数组使用xxd i http linuxcommand org man pages xxd1 html 我将结果包装在匿名命名空间和标头保
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • EntityFramework 6.0.0.0 读取数据,但不插入

    我创建了一个基于服务的数据库 folderName gt Add New Item gt Data gt Service based Database文件到 WPF 应用程序中 然后我用过Database First方法并创建了Person
  • 没有“对 *this”功能的右值引用的解决方法

    我有一个围绕可移动对象的代理容器类 并希望代理能够隐式生成对底层对象的右值引用 但仅当代理本身被移动时 我相信我将能够按照提案 n2439 实施此行为 将移动语义扩展到 this http www open std org jtc1 sc2
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点
  • 是否允许全局静态标识符以单个 _ 开头?

    换句话说 可能static 文件范围 全局变量恰好以一个下划线开头 而不会产生与 C 实现发生名称冲突的可能性 https www gnu org software libc manual html node Reserved Names

随机推荐

  • 如何在 intelliJ-idea 中最好地调试 solr?

    如何在 intelliJ idea 中最好地调试 solr 哪条路容易 当向 solr 发布查询时 我想处理这个问题 您可以设置远程调试 在里面运行 调试配置 然后当使用默认的jetty 这个处于多核模式 启动solr时 传入 java a
  • 按第一个字母对字符串数组进行分组

    我面临这个挑战 其中包括 编写一个以字符串数组作为参数的函数 然后 按第一个字母对数组中的字符串进行分组 返回一个对象 其中包含带有代表第一个字母的键的属性 例如 应该返回 groupIt hola adios chao hemos acc
  • Android - EBADF(错误文件号)OnClickInfoMarker

    我搜索过相关问题但没有找到 我创建了一个显示图片 名称和地址的 InfoWindowMarker 然后我创建 OnInfoWindowClickListener 将显示所选标记的纬度和经度 但是当我单击信息窗口时 我收到此错误消息 Logc
  • Kotlin 中对象字段中具有上下文的 Android 类

    Kotlin 中的对象类中是否可以有一个具有上下文的属性 在 Android 中 将上下文相关对象放入静态字段中是一种不好的做法 Android studio 甚至会突出显示它并发出警告 这与 Kotlin 不同 Kotlin 没有警告 示
  • Pandas 数据框从指定列中选择具有最高值的整行

    我有一个数据框 我想返回包含指定列中最大值的完整行 假设我创建了一个像这样的数据框 df pd DataFrame np random randint 0 100 size 25 4 columns list ABCD 然后我会有一个像这样
  • Android 测试框架

    我是 Android 测试框架的新手 想了解现有测试框架之间的区别 Monkey CTS Instrumentation Framework 和 Robotium 仪器仪表是测试的一个类别 与单元测试相反 该框架提供了用于仪器测试的挂钩 但
  • 将散列捆绑 URL 插入静态 pug 模板

    我正在使用 Webpack pug html loader file loader 生成一堆静态 pug 模板 我还想开始添加散列捆绑文件名 但我无法弄清楚如何将散列文件名插入到我的所有哈巴狗模板中 这就是我当前在所有哈巴狗模板中引用我的包
  • 为什么是 SIGSEGV?

    为什么这段代码会抛出一个SIGSEGV http en wikipedia org wiki SIGSEGV int main unsigned long toshuffle 9765625 unsigned long i for i 0
  • 螺纹消毒剂可以用吗?

    我想尝试一下线程消毒剂 http code google com p data race test wiki ThreadSanitizer Using ThreadSanitizer http code google com p data
  • 无法使用 jinja2 将浮点数舍入为整数

    尝试让 jina2 模板执行舍入时遇到问题 我真的不介意发生什么 因为我的所有数字都是通过乘以小于 1 的小数得出的 例如0 31 然后乘以100 所以我有31 0 我想去掉小数位 但似乎没有任何作用 row score combined
  • 单击通知时如何打开“活动”

    我需要使用带有点击事件的通知 我有通知方法 但此方法不会打开我的活动 My code private void sendNotification String msg NotificationCompat Builder mBuilder
  • 批:管子是什么|用于?

    stackoverflow 用户大家好 我对批处理并不陌生 我只是从来没用过管道 批量 甚至在我阅读 ss64 com 上的参考资料后 我也不明白管道的用途 起初我以为它是 OR 运算符或其他东西 显然我现在知道它不是 我只知道它位于两行
  • 是否可以不关闭 StreamReader/StreamWriter 以保持底层流打开?

    我有一个类 它本质上包装了一个用于读 写的流 但该流预计由该类的使用者管理 为了便于使用 我使用 StreamReader 和 StreamWriter 类对流执行 I O 操作 通常我会把读者和作者包裹起来using块 但我想避免关闭读取
  • 为什么我设置xlib窗口背景透明失败?

    我使用以下代码获得透明窗口 但它返回黑色 我出了什么问题 并且 任何人都可以给我一个简单的例子来创建具有透明背景的窗口吗 谢谢 include
  • 在 C# 中使用 LibTiff(访问平铺的 TIFF 图像)

    我想使用 LibTiff 访问非常大的 TIFF 文件 我需要多个页面和图块等功能 因此 LibTiff 似乎是正确的选择 谁能帮助我如何在 C 中使用 LibTiff 我找到了一些链接 例如博客 bee ee http blog bee
  • android通用图像加载器清除缓存

    我使用通用图像加载器从 url 加载图像这是适配器 public class BinderDataImg extends BaseAdapter static final String KEY IMG img LayoutInflater
  • RStudio、knitr、pandoc、Word:如何在我的 docx 中获得“新页面”?

    我正在使用 RStudio knitr pandoc MS Word 组合来获得最终结果docx文档 有时 我希望报告能在新的一页上继续 我找不到实现这一目标的方法 从我用谷歌搜索到的内容来看 这似乎是可能的CSS 我不知道HTML or
  • 在 azure 函数发布过程中包含使用 dllimport 使用的 c/c++ 非托管代码 dll

    如何在 azure 函数发布过程中包含在 c c 非托管代码 dll 中 并使用 v2 net core 兼容的 DllImportAttribute 语句使用 我已通过 azure 存储资源管理器手动复制到功能应用程序存储帐户来确认它在云
  • 如何将@Resource WebServiceContext注入与Spring的@Transactional一起使用

    我有一个 Metro jax ws Web 服务 看起来或多或少像这样 WebService Transactional public class UserManagementServiceImpl Resource private Web
  • Entity Framework Core:以字符串作为参数从动态表中获取列表

    我有一个动态变量 它可以是我的数据库中每个表的名称 这是我想要获取的数据的示例 var tableData context Users ToList But the Users应作为字符串传入 我尝试过的 Exception System