Во многих случаях я хочу сделать некоторую фильтрацию (а иногда и проекцию) на стороне сервера, а затем переключиться на клиентскую сторону для операций, которые поставщик LINQ не поддерживает.
Наивный подход (в основном это то, что я сейчас делаю) - это просто разбить его на несколько запросов, аналогично:
var fromServer = from t in context.Table
where t.Col1 = 123
where t.Col2 = "blah"
select t;
var clientSide = from t in fromServer.AsEnumerable()
where t.Col3.Split('/').Last() == "whatever"
select t.Col4;
Однако, есть много раз, когда это больше кода/проблемы, чем это действительно стоит. Я бы очень хотел сделать "переключатель на стороне клиента" посередине. Я пробовал различные методы использования продолжения запроса, но после выполнения "select t to foo" в конце первого запроса foo по-прежнему является отдельным элементом, а не сборкой, поэтому я не могу AsEnumerable() it.
Моя цель - написать что-то большее:
var results = from t in context.Table
where t.Col1 = 123
where t.Col2 = "blah"
// Magic happens here to switch to the client side
where t.Col3.Split('/').Last() == "whatever"
select t.Col4;