我有返回类型可以不同的通用查询。因此,我无法使用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中的逻辑是正确的,因为它们已经使用了许多年。但是,它们来自不同的库,因此需要单独使用。 filter参数包含字符串,这些字符串是查询属性的名称。这样,可以在执行查询之前对其进行扩展。在类型化的EDMX对象上进行静态mvc查询时,这可以很好地工作。
但是,此代码不适用于我的数据表。它不会产生任何错误,但是过滤器也不会减少数据。 (除其他原因外,我认为这是因为查询是在调用AsQueryable函数之前实现的)
有人知道我可以创建要尝试实现的逻辑的方法吗? (我的意思是创建一个大型查询,该查询只有在完全建立查询后才能实现)
最佳答案
难道是GetDataTable()。AsEnumarable()返回了DataRow的列表,而GetFilteredList却键入了某种实体类?
如果是这种情况,那么您应该以某种方式将“过滤器”转换为WHERE(Filter1 ='value1')AND ...形式的字符串,并将其放入要传递给GetDataTable()的SQL字符串中。