Элегантное решение, чтобы проверить, равны ли две даты в Linq (где вторая дата НЕ является параметром) - PullRequest
9 голосов
/ 28 декабря 2011

Мне нужно проверить, совпадают ли две даты в запросе Linq, а даты взяты из двух разных таблиц (не как параметр).Я посмотрел на существующие решения в Интернете, а также в SO.некоторые не применимы в моем случае, а некоторые не элегантны.просто ищу лучшее альтернативное решение, если есть какой-либо.

пример запроса (нужно сравнивать только части даты):

var query = from t1 in Table1
            join t2 in Table2 on t1.Id equals t2.ForeignKeyId
            where t1.Id = someId
               && t1.Date1.Date.Equals(t2.Date2.Date)

этот сбой с ошибкой "Дата" не поддерживаетсяв LINQ to Entityies. Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей "

сообщение 'Дата' не поддерживается в LINQ to Entities.Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей имеет решение, которое сравнивает день, месяц и год отдельно.Я пытался обернуть его в метод расширения, но, похоже, Linq тоже не любит методы расширения.поскольку вторая дата не является переменной, я не могу использовать другое решение, упомянутое в связанном посте (и по какой-то причине не могу вызвать метод «AddDays» для даты внутри Linq).Похоже, что есть много ограничений для Date API в Linq.

Ответы [ 2 ]

16 голосов
/ 28 декабря 2011

Попробуйте использовать DiffDays из класса EntityFunctions.Лично никогда не использовал это, но стоит попробовать вот так:

var query = from t1 in Table1
        join t2 in Table2 on t1.Id equals t2.ForeignKeyId
        where t1.Id = someId
           && EntityFunctions.DiffDays(t1.Date1, t2.Date2) == 0
0 голосов
/ 28 декабря 2011

Насколько я помню, вы можете просто сравнить даты, используя == operator.

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