2010-09-07 4 views
1

из пользовательского запроса SQL Я хотел бы получить IQueryable (у меня есть свои причины):Объединить Linq2SQL с пользовательской SQL

Что-то вроде:

IQueryable<Client> query = Foo<Client>("SELECT * FROM Clients WHERE ..."); 

query.Where(e => e.Active==true).Skip(10).Take(10); //etc. 

Есть ли способ реализации Foo?

Я нашел ExecuteQuery<T>(...).AsQueryable(), но это не работает, поскольку он загружает все записи.

+1

возможно дубликат [LINQ к SQL ExecuteQuery() как IQueryable] (http://stackoverflow.com/questions/1065241/linq-to-sql-executequery-as-iqueryable) –

ответ

1

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

1

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

2

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

SELECT * FROM Clients... 

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

var results = db.MyViews.Where(e => e.Active == true).Skip(10).Take(10); 
+0

Нет, уточнить, в SQL Пользователь отправлен. (Я работаю над инструментом администратора) –

+0

В этом случае я бы обернул запрос в другом запросе для обработки подкачки, вы находитесь в стране динамического SQL в этот момент, я думаю. Какую базу данных вы используете? – RedFilter