从自定义SQL查询中我想得到一个IQueryable(我有我的理由):
类似的东西:
IQueryable<Client> query = Foo<Client>("SELECT * FROM Clients WHERE ...");
query.Where(e => e.Active==true).Skip(10).Take(10); //etc.
有没有办法实现Foo?
我找到ExecuteQuery<T>(...).AsQueryable()
,但这不起作用,因为它加载了所有记录。
答案 0 :(得分:2)
您可以将这部分查询放在视图中吗?
SELECT * FROM Clients...
然后您可以使用LINQ Where
和Skip/Take
。
var results = db.MyViews.Where(e => e.Active == true).Skip(10).Take(10);
答案 1 :(得分:1)
您可以实现此功能,但您必须解析SQL文本并查找映射以获取正确的类型(例如,从 Clients 到{{1 }})。没有用于从SQL自动生成Client
的内置工具。
答案 2 :(得分:1)
从我的观点来看,最好的方法是在这种情况下实现自己的包装继承IQueryable。在GetEnumerator()中,您可以实现逐行结果读取,或者只是从您自己的GetEnumerator()方法返回ExecuteQuery(...)。GetEnumerator()。
答案 3 :(得分:1)