если бы вы не фильтровали до своего теоретического ключевого слова asLocal, тогда да, все они были бы локальными (именно поэтому в сценарии сначала выполняется фильтрация на стороне сервера). Если ваша фильтрация на стороне сервера имела только 1 'd' (и, следовательно, один родительский 'o' для него и один родительский 'c' для этого), то я действительно не вижу, в чем проблема с тем, что все они находятся в области видимости. В качестве альтернативы, поскольку синтаксис понимания запросов явно переводится в синтаксис цепочки методов, вы можете рассмотреть вопрос («какие варианты доступны для« преобразования »AsEnumerable в понимание запроса?»)
огих случаях я хочу выполнить некоторую фильтрацию (и иногда проекцию) на стороне сервера, а затем переключиться на сторону клиента для операций, которые изначально не поддерживаются поставщиком 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 into foo' в конце первого запроса foo остается отдельным элементом, а не коллекцией, поэтому я не могу AsEnumerable () его ,
Моя цель - написать что-то похожее на:
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;