2

简而言之:我可以在实体模型中以某种方式使用文字 SQL 子查询而不使用数据库视图吗?

上下文:我有一堆导致 C# 对象的 ADO.NET 查询。这些对象直接对应于查询形状;即我可以ObjectContext.Translate将它们从SqlDataReader. 有很多这样的查询,很多相当复杂,其中一些使用实体框架不支持的功能(while 循环、CTE、hierarchyid 等)——将这些(遗留)查询转换为 LINQ 是不可行的。

但是,我真的希望能够包装这些结果并在 C# 方面添加一些自定义过滤:排序、过滤、分页等。我可以将每个查询转换为视图(或存储过程)和映射这些,但这是一个麻烦和维护的噩梦 - 但原则上 EF 可以通过该路线与“不透明”SQL 查询一起使用。

我可以以某种方式将用 SQL 编写的子查询与实体模型一起使用吗?ObjectContext.Translate返回 anIQueryable而不是 an的 AnIEnumerable是理想的,但不是必需的:绝大多数查询都是编译时常量,因此可以进行某种形式的预处理。

编辑:我正在寻找返回的东西,IQueryable所以我可以添加过滤器/排序客户端,但让它们在数据库上执行(像往常一样)。我首先使用实体​​框架代码。

4

2 回答 2

3

您可以将DefiningQueryEntitySet 的属性设置为一些文字 SQL。这些或多或少等同于 SQL 视图。这能解决你的问题吗?

http://msdn.microsoft.com/en-us/library/cc982038.aspx

于 2012-08-06T14:41:17.313 回答
1

如果您的 SQL 查询给出的结果与实体类的结构相同,则可以使用DbContext.SqlQuery

 var customer=context.Database.
         SqlQuery<Customer>("SELECT ID,NAME from CUSTOMER WHERE TYPE IN 
                     (SELECT TYPEID FROM IMPORTANT_TYPE)");

假设context是您的 DBContext 类对象

于 2012-08-06T14:48:34.520 回答