c# - 将 C# 表达式与 ADO.NET 数据表相结合
问题描述
我有返回类型可以不同的通用查询。因此,我不能使用 TVF,因此我使用的是 Datatables。
我还想扩展数据表的查询。
我试图通过以下方式做到这一点:
var data = GetDataTable($"SELECT * FROM {tablename}").AsEnumerable().AsQueryable().GetFilteredList(filters);
下面是GetFilteredList的函数定义:
IQueryable<T> GetFilteredList<T>(this IQueryable<T> items, List<PostedFilter> filters)
GetDataTable 和 GetFilteredList 函数中的逻辑是正确的,因为它们已经使用了多年。然而,它们是分开使用的,因为它们来自不同的库。filters 参数包含作为查询属性名称的字符串。这样查询可以在被执行之前被扩展。这对于类型化 EDMX 对象的静态 mvc 查询非常有效。
但是,此代码不适用于我的数据表。它不会产生任何错误,但过滤器也不会减少数据。(我认为这是因为查询是在调用 AsQueryable 函数之前实现的)
有谁知道我可以创建我要实现的逻辑的方法?(我的意思是创建一个大型查询,该查询仅在查询完全建立后才具体化)
解决方案
会不会是 GetDataTable().AsEnumarable() 返回 DataRow 的列表,而 GetFilteredList 被键入到某种实体类?
如果是这种情况,那么您应该以某种方式将您的“过滤器”转换为 WHERE (Filter1 = 'value1') AND ... 形式的字符串,然后将其放入您传递给 GetDataTable() 的 SQL 字符串中。
推荐阅读
- javascript - SyntaxError:非法返回语句 [Discord.js]
- c# - 使用 dll 中的方法的替代 Activator.CreateInstance()
- php - 你如何验证正则表达式中的字符和单词?
- discord.js - Remove users reaction when they have clicked on the ReactionCollector
- ruby - eventmachine安装中的捆绑安装错误
- python - 带有计算 python 的数据透视表
- c++ - 如何使用 SDL 绘制 45x45 网格
- eslint - 无法使用 eslint cli 启用无控制台
- square-connect - Square 创建付款时设置 app_fee_money 的权限不足
- node.js - 将来自 Azure node.js Web 应用的请求发布到另一台服务器。请求问题:连接 EACCES 错误