LINQ Конвертировать строку в дату и время - PullRequest
2 голосов
/ 22 февраля 2011

В SQL я делаю это так:

DateMonth=convert(datetime, convert(char(6), AASI.Inv_Acctcur) + '01')

Как это сделать в LINQ? Строка в следующем формате:

"yyyyMMdd"

Спасибо
Ile

EDIT:

Пример использования SQL:

SELECT convert(datetime, '20161023', 112) -- yyyymmdd 

Найдено здесь: http://www.sqlusa.com/bestpractices/datetimeconversion/

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

На этой странице документации MSDN перечислены все методы преобразования, которые LINQ to SQL не поддерживает.

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

2 голосов
/ 22 февраля 2011

Обычно это не то, что для LINQ или любого провайдера с поддержкой LINQ over Expression (например, LINQ to SQL, LINQ to Entities, LINQ to NHibernate, LLBLGen Pro и т. Д. И т. Д.). Это просто языковой вопрос. Вы хотите знать, как преобразовать формат yyyyMMdd в DateTime.

Хитрость заключается в том, чтобы оставить OUT преобразования запроса LINQ (через деревья выражений), потому что поставщик LINQ не сможет преобразовать его, или, если это возможно, вы получите реализацию, очень специфичную для поставщика.

Таким образом, хитрость заключается в том, чтобы извлечь ее из базы данных в виде строки (или, конечно, еще лучше: изменить модель базы данных) и преобразовать ее в DateTime в .NET. Например:

// Doing .ToArray is essential, to ensure that the 
// query is executed right away.
string[] inMemoryCollectionStrings = (
    from item in db.Items
    where some_condition
    select item.Inv_Acctcur).ToArray();

// This next query does the translation from string to DateTime.
IEnumerable<DateTime> dates =
    from value in inMemoryCollectionStrings
    select DateTime.ParseExact(value, "yyyyMMdd", 
        CultureInfo.InvariantCulture);

Другими словами, вы можете использовать следующую строку для преобразования:

DateTime.ParseExact(value, "yyyyMMdd", CultureInfo.InvariantCulture);
...