Linq 2 Sql Формат DateTime для строки yyyy-MM-dd

В принципе, мне нужен эквивалент T-SQL CONVERT(NVARCHAR(10), datevalue, 126)

Я пробовал:

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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Забастовкa >

Изменить: ОК, вторая попытка...

Проблема заключается в переводе на 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, и выполнить непосредственно в базе данных.

Ответ 3

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

Ответ 4

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

//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");

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

Ответ 5

посмотреть №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埋めされるよ
                     });

Ответ 6

попробуйте это

var select = from s in db.Table
             where s.date == someDate
             select new 
             {
                date = DateTime.Parse(s.date.ToString()).ToString("yyyy-MM-dd"),
             };