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

10-05 23:40