首页 > 解决方案 > 将 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 函数之前实现的)

有谁知道我可以创建我要实现的逻辑的方法?(我的意思是创建一个大型查询,该查询仅在查询完全建立后才具体化)

标签: c#datatableedmx

解决方案


会不会是 GetDataTable().AsEnumarable() 返回 DataRow 的列表,而 GetFilteredList 被键入到某种实体类?

如果是这种情况,那么您应该以某种方式将您的“过滤器”转换为 WHERE (Filter1 = 'value1') AND ... 形式的字符串,然后将其放入您传递给 GetDataTable() 的 SQL 字符串中。


推荐阅读