考虑我的应用程序中有一些代码优先模型和一些代码段:
var myQueryable = (IQueryable<MyEntity>dbContext.MyEntitySet;
var myFilteredQueryable = externalService.Filter(myQueryable);
现在,我需要从数据库中调用存储函数以添加其他条件,如下所示:
WHERE MyFunc(MyCol) = 1;
我知道,用EdmFunciton
创建自己的函数是不可能的,就像这样使用它:
myFilteredQueryable = myFilteredQueryable.Where(myEnt => MyFunctions.MyFunc(myEnty.MyCol);
首先在Databse / Model中提供。
我知道我可以直接运行它:
var selectedIds = myFilteredQueryable.Select(m => m.Id).ToArray();
var filteredIds = dbContext.Database.ExecuteSqlQuery<int>("SELECT Id FROM MyEntity WHERE MyFunc(MyCol) = 1 AND ID in (" + string.Join(selectedIds, ",") + ")").ToArray();
myFilteredQueryable = myFilteredQueryable.Where(myEnt => filteredIds.Contains(myEnt.Id));
这个解决方案的性能不是很好..通过函数可查询过滤的其他方法是什么?我有义务使用Code First,无法对外部服务进行外观处理。