将原始 SQL 与 IQueryable 混合用于动态过滤器
Mixing raw SQL with IQueryable for dynamic filter
在 entity framework 6 中是否可以像这样混合使用 IQueryable 动态生成的原始 SQL:
IQueryable<Tree> tree_query = context.Trees.Where(t=>t.Height> 2);
IEnumerable<int> tree_additional_filter = context.Database.SqlQuery<int>("SELECT Id FROM TREE_VIEW WHERE Width < 1");
IQueryable<Tree> final_query = from tree in tree_query
join filtering_tree in tree_additional_filter on filtering_tree.id equals tree.id
select tree;
这会按原样生成结果,但 "tree_additional_filter" 会在数据库中执行以构造 final_query。如何让 entity framework 仅从中构建一个查询?
我需要它来创建与静态过滤字段一起工作的动态过滤字段。
我还尝试创建 TREE_VIEW 仅包含 Id 列的实体,我知道它始终存在。
使用 System.Linq.Dynamic 在仅具有 ID 属性 的 TREE_VIEW 实体上动态构建 "where" 子句,但如果类型中不存在属性,则显然无法构建表达式。
In entity framework 6 is it possible to mix raw SQL generated dynamically with IQueryable like this:
没有。请注意 Database.SqlQuery returns 是 IEnumerable<T>
,而不是 IQueryable<T>
。因此,将使用 LINQ to Objects 针对查询结果执行任何其他查询表达式。
Query Composition with raw SQL EF Core 中引入了查询。
我做到了。
- 使用 Dynamic type generation 从字段中创建类型 (
NewDynamicType
),我从 TREE_VIEW
中选择了前 1 个字段。通过 OnModelCreating
中的 DbModelBuilder.RegisterEntityType
将 NewDynamicType
附加到数据库上下文。
- 使用 System.Linq.Dynamic 然后我可以构建
IQueryable
从 context.Set(NewDynamicType)
中选择用户想要过滤的任何字段。
- 像我的问题一样加入
final_query
。
现在我的 HTML 表单从数据库视图中获取字段,并且在每个分发中我可以定义不同的过滤器而无需编写任何 c#。
在 entity framework 6 中是否可以像这样混合使用 IQueryable 动态生成的原始 SQL:
IQueryable<Tree> tree_query = context.Trees.Where(t=>t.Height> 2);
IEnumerable<int> tree_additional_filter = context.Database.SqlQuery<int>("SELECT Id FROM TREE_VIEW WHERE Width < 1");
IQueryable<Tree> final_query = from tree in tree_query
join filtering_tree in tree_additional_filter on filtering_tree.id equals tree.id
select tree;
这会按原样生成结果,但 "tree_additional_filter" 会在数据库中执行以构造 final_query。如何让 entity framework 仅从中构建一个查询?
我需要它来创建与静态过滤字段一起工作的动态过滤字段。
我还尝试创建 TREE_VIEW 仅包含 Id 列的实体,我知道它始终存在。 使用 System.Linq.Dynamic 在仅具有 ID 属性 的 TREE_VIEW 实体上动态构建 "where" 子句,但如果类型中不存在属性,则显然无法构建表达式。
In entity framework 6 is it possible to mix raw SQL generated dynamically with IQueryable like this:
没有。请注意 Database.SqlQuery returns 是 IEnumerable<T>
,而不是 IQueryable<T>
。因此,将使用 LINQ to Objects 针对查询结果执行任何其他查询表达式。
Query Composition with raw SQL EF Core 中引入了查询。
我做到了。
- 使用 Dynamic type generation 从字段中创建类型 (
NewDynamicType
),我从TREE_VIEW
中选择了前 1 个字段。通过OnModelCreating
中的DbModelBuilder.RegisterEntityType
将NewDynamicType
附加到数据库上下文。 - 使用 System.Linq.Dynamic 然后我可以构建
IQueryable
从context.Set(NewDynamicType)
中选择用户想要过滤的任何字段。 - 像我的问题一样加入
final_query
。
现在我的 HTML 表单从数据库视图中获取字段,并且在每个分发中我可以定义不同的过滤器而无需编写任何 c#。