Подстрока DateTime с расширениями Linq to Sql - PullRequest
5 голосов
/ 24 января 2012

Я пытаюсь получить список дат из моей таблицы, который содержит ряд значений DateTime в столбце с именем StartTime. Мой предшественник использовал следующий SQL:

SELECT DISTINCT SUBSTRING(CONVERT(VARCHAR(50), StartTime, 120), 1, 10)

В результате получается отдельный список дат в формате "гггг-мм-дд" для каждой строки таблицы. Я пытаюсь преобразовать это в Linq-to-SQL, выполнив следующее:

query.Select(o => o.StartTime.ToString("yyyy-MM-dd")).Distinct()

Однако это приводит к ошибке "Метод 'System.String ToString (System.String)' не имеет поддерживаемого перевода в SQL."

Как я могу сделать эту Подстроку / Преобразовать, используя Linq-to-SQL?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 24 января 2012

Вместо того чтобы полагаться на обработку строк, вы можете обрабатывать это с помощью свойств DateTime, поддерживаемых в LINQ to SQL :

var results = query.Select(o => o.StartTime.Date).Distinct();

Если вы хотите просмотреть это как строку, позже вы можете использовать LINQ to Objects для преобразования результатов:

var stringResults = results.AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"));
4 голосов
/ 24 января 2012

Я бы сделал:

query.Select(o => o.StartTime.Date)
     .Distinct() // Runs on the database
     .AsEnumerable() // Convert to local sequence
     .Select(date => date.ToString("yyyy-MM-dd")) // Runs on the client

Свойство DateTime.Date (удаляет часть под-даты) поддерживается в LINQ to SQL, поэтому все, кроме форматирования даты, будет выполняться в базе данных,

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