Формат Linq 2 Sql DateTime в строку гггг-мм-дд - PullRequest
11 голосов
/ 11 марта 2010

По сути, мне нужен эквивалент T-SQL CONVERT(NVARCHAR(10), datevalue, 126)

Я пробовал:

  1. from t in ctx.table select t.Date.ToString("yyyy-MM-dd") но выдает не поддерживаемое исключение
  2. from t in ctx.table select "" + t.Date.Year + "-" + t.Date.Month + "-" + t.Date.Day но я не думаю, что это пригодное для использования решение, потому что мне может потребоваться изменить формат.

Единственный вариант, который я вижу, это использовать Convert.ToString(t.Date, FormatProvider), но мне нужен поставщик форматов, и я не уверен, что он тоже работает

FormatProvider не не работает , String.Format не работает (string.Format("{0:yyyy-MM-dd}", t.Date) выдает также не поддерживаемые исключения).

Ответы [ 6 ]

7 голосов
/ 28 февраля 2011

В случае, если у кого-то еще есть эта проблема, я решил эту проблему, создав отдельную функцию для меня для форматирования даты.

Мой Linq выглядит примерно так:

from a in context.table
where ...
select new Class
{
DateString = GetFormattedString(a.DateTimeObject)
}

А GetFormattedString просто возвращает DateTimeObject.ToString ("yyyy-MM-dd"); Это работает для меня!

6 голосов
/ 11 марта 2010

Если предположить, что t.Date имеет значение nullable (DateTime?), это может быть проблемой, попробуйте использовать:

from t in ctx.table select (t.HasValue ? t.Date.Value.ToString("yyyy-MM-dd") : string.Empty );

Редактировать: ОК, вторая попытка ...

Проблема заключается в преобразовании в SQL, которое пытается преобразовать .ToString() в представление SQL, и завершается неудачно. Так что, если вы должны сделать следующее, это должно работать:

(from t in ctx.table select t.Date).ToList().Select(d => d.ToString("yyyy-MM-dd"))

или

(from t in ctx.table select t.Date).AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"))

AsEnumerable() преобразует ранее использованные IQueryable в IEnumerable, тем самым останавливая генерацию SQL (в случае Linq to SQL) или любое другое преобразование поставщиком, реализующим конкретный IQueryable (например, Linq к поставщику SQL).

Обратите внимание, что перед вызовом AsEnumerable() вы должны были выполнить все действия, которые вы хотите преобразовать в SQL и выполнить в базе данных напрямую.

4 голосов
/ 11 марта 2010

Есть ли причина для выполнения преобразования на стороне базы данных? Всякий раз, когда я сталкиваюсь с ситуацией такого типа, я обычно позволяю базе данных давать мне необработанные данные, а затем выполняю массаж и манипуляции в приложении. В зависимости от объема запросов к серверу базы данных и размера набора результатов я не хочу связывать обработку и время отклика, выполняя преобразования данных, которые могут обрабатываться клиентом.

1 голос
/ 24 октября 2014

смотреть № 3

var user = (from u in users
                     select new
                     {
                         name = u.name,
                         birthday = u.birthday.Value
                     })
                     .ToList()
                     .Select(x => new User()
                     {
                         name = x.name,
                         birthday = x.birthday.ToString("yyyyMMdd") // 0埋めされるよ
                     });
1 голос
/ 22 апреля 2013

Попытайтесь создать класс объектов, в котором вы можете установить свойства и позволить свойствам быть значением для вашего представления. Установите данные даты и времени из LINQ в виде строки, а не даты и времени. Например.

//Property class
[DataContract()]
public class Info
{
[DataMember(Name = "created_date")]
public string CreateDate;
}


//Controller
var date = from p in dbContext.Person select p;
CreateDate = Convert.ToDateTime(p.create_date).ToString("yyyy-MM-dd");

Надеюсь, вы попробуете это .. У меня есть это на моих прошлых приложениях, и это то, что я сделал.

0 голосов
/ 25 августа 2016

попробуйте

var select = from s in db.Table
             where s.date == someDate
             select new 
             {
                date = DateTime.Parse(s.date.ToString()).ToString("yyyy-MM-dd"),
             };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...