[英]Combining C# Expressions with ADO.NET Datatables
我有返回类型可以不同的通用查询。 因此,我无法使用 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 函数中的逻辑是正确的,因为它们已经使用了多年。 然而,它们是单独使用的,因为它们来自不同的库。 过滤器参数包含作为查询属性名称的字符串。 通过这种方式,可以在执行之前扩展查询。 这对于类型化 EDMX 对象的静态 mvc 查询非常有效。
但是,此代码不适用于我的数据表。 它不会产生任何错误,但过滤器也不会减少数据。 (除其他原因外,我认为这是因为在调用 AsQueryable 函数之前查询已具体化)
有谁知道我可以创建我试图实现的逻辑的方法吗? (我的意思是创建一个大型查询,该查询仅在查询完全建立后才具体化)
可能是 GetDataTable().AsEnumarable() 返回 DataRow 的列表,而 GetFilteredList 被输入到某种实体类?
如果是这种情况,那么您应该以某种方式将您的“过滤器”转换为 WHERE (Filter1 = 'value1') AND ... 形式的字符串,并将其放入您传递给 GetDataTable() 的 SQL 字符串中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.