Сравните с локальной последовательностью в Linq to Sql - PullRequest
3 голосов
/ 10 ноября 2011

Я получил местный List<DateInterval>, где DateInterval:

internal class DateInterval{
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
}

Я хочу получить все события в базе данных, которые соответствуют хотя бы одному из DateInterval.

В идеале я сделаю что-то вроде:

var query = from _event in db.GetTable<Event>()
            where dates.Any(d => d.StartDate <= _event.Date && d.EndDate > _event.Date)
            select _event;

Но я получаю следующее исключение:

Local sequence cannot be used in LINQ to SQL implementation of query operators except     the Contains() operator

Поскольку метод .Contain() принимает только точные результаты вместо временных меток, есть ли способ достичь желаемых результатов?

1 Ответ

0 голосов
/ 10 ноября 2011

Ваш основной вариант здесь состоит в том, чтобы материализовать запрос из базы данных, а затем выполнить сравнение со списком в памяти.

var query = yourSqlQuery.AsEnumerable() // forces* evaluation
                        .Where(...) // happens in memory 

Очевидно, что чем больше фильтрации вы можете выполнить на БД, чтобы вытянуть меньше результатов в память, тем лучше, но в этом случае ваши возможности ограничены.

var query = db.GetTable<Event>().AsEnumerable().Where(event => dates.Any(...)); 

* Оценка по-прежнему откладывается до тех пор, пока вы не воспользуетесь результатами запроса, но фильтрация из дополнительного Where произойдет в памяти, часть до AsEnumerable() произойдет в базе данных.

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