c# - 将 C# 表达式与 ADO.NET 数据表相结合

标签 c# datatable edmx

我有返回类型可以不同的通用查询。因此,我无法使用 TVF,因此我正在使用数据表。

我也想扩展数据表的查询。

我正在尝试通过以下方式做到这一点:

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 字符串中.

关于c# - 将 C# 表达式与 ADO.NET 数据表相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55161201/

相关文章:

visual-studio - 为什么 Entity Framework 模型浏览器不显示?

c# - 如何查看我们连接到的主机

c# - 在 WIndow 服务中捕获 KeyPress 事件

c# - C#UWP MediaPlayer在模拟器上崩溃

jsf - :commandButton not working inside h:dataTable

c# - 如何将 "Provider Connection String"与 EF (EDMX) 元数据信息分开?

c# - 如何获取lambda表达式的值

javascript - 每页多个数据表

带有 Primefaces 和 dataTable 的 javax.el.PropertyNotFoundException

.net - 创建 Entity Framework DbContext 时如何将现有模型 "attach"到现有 DbConnection?