繁体   English   中英

将 C# 表达式与 ADO.NET 数据表相结合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM