我有返回类型可以不同的通用查询。因此,我无法使用 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/