【发布时间】:2019-10-07 15:25:34
【问题描述】:
在实体框架 6 中,是否可以像这样将动态生成的原始 SQL 与 IQueryable 混合:
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。如何让实体框架只构造一个查询?
我需要它来创建与静态过滤器字段一起使用的动态过滤器字段。
我还尝试创建只有 Id 列的 TREE_VIEW 实体,我知道它始终存在。 使用 System.Linq.Dynamic 在只有 Id 属性的 TREE_VIEW 实体上动态构造“where”子句,但如果 Type 中不存在属性,则显然无法构建表达式。
【问题讨论】:
-
此代码不混合查询。这是两个单独的查询。第一次查询的结果存放在
tree_additional_filter -
如何使 tree_additional_filter 成为 Iqueryable 以添加到其他查询?
标签: c# sql entity-framework-6 system.linq.dynamic