Объедините Linq2SQL с пользовательским SQL - PullRequest
1 голос
/ 07 сентября 2010

Из пользовательского запроса 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(), но это не работает, так как загружает все записи.

Ответы [ 4 ]

2 голосов
/ 07 сентября 2010

Можете ли вы поместить эту часть вашего запроса в представление?

SELECT * FROM Clients...

Тогда вы можете использовать LINQ Where и Skip/Take.

var results = db.MyViews.Where(e => e.Active == true).Skip(10).Take(10);
1 голос
/ 09 сентября 2010
1 голос
/ 07 сентября 2010

С моей точки зрения, лучшим способом было бы реализовать собственную оболочку, наследующую IQueryable для таких случаев. В GetEnumerator () вы можете реализовать построчное чтение результатов или просто вернуть ExecuteQuery (...). GetEnumerator () из собственного метода GetEnumerator ().

1 голос
/ 07 сентября 2010

Вы могли бы реализовать это, но вам нужно было бы проанализировать текст SQL и посмотреть отображение, чтобы получить правильные типы (например, от Clients до Client). Нет встроенного средства для автоматической генерации IQueryable из SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...