Linq-выбор даты из DateTime
у меня есть Linq
результат, из которого мне нужно выбрать только Date
С DateTime
.
Мой запрос выглядит так:
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
{
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
//CREATED_DATE = xx.CREATED_DATE.Value.Date
//CREATED_DATE = EntityFunctions.TruncateTime(xx.CREATED_DATE)
xx.CREATED_DATE
}).ToList();
возможно ли это? Любая помощь будет очень признательна.
CREATED_DATE - `datetime` datatype
на самом деле, я привязываю его к элементу управления как DataSource
и элемент управления отображает как Date and Time
.Но я хочу показать только date
.
когда я пытаюсь с CREATED_DATE = xx.CREATED_DATE.Value.Date
,это дает ошибку типа :
указанного член типа "дата" не поддерживается в LINQ to Entities. Только инициализаторы, члены сущностей и свойства навигации сущностей поддерживаются.
5 ответов
если это для целей презентации, то вы можете использовать DataFormatString
собственность. Например, если вы привязываете источник данных к GridView, вы можете сделать это как;
<asp:BoundField DataField="CREATED_DATE" ...
DataFormatString="{0:d}" ../>
еще вы можете использовать EntityFunctions.TruncateTime (), который возвращает дату ввода без часть времени.
EntityFunctions.TruncateTime(xx.CREATED_DATE)
ваш запрос будет нравится;
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
{
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
EntityFunctions.TruncateTime(xx.CREATED_DATE) //new like
}).ToList();
возможно это ?
var qry = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new { xx.TEMPLATE_ID, xx.TEMPLATE_NAME, xx.xx.CREATED_DATE });
var UserTemplates = qry.AsEnumerable().Select(xx => new
{
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
xx.CREATED_DATE.Value.Date
}).ToList();
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1 select xx).AsEnumerable()
.Select( i=> new
{
i.TEMPLATE_ID,
i.TEMPLATE_NAME,
CREATED_DATE = i.CREATED_DATE.ToString("M/d/yyyy"),
i.CREATED_DATE
}).ToList();
используйте это...это сработало для меня..
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new
{
xx.TEMPLATE_ID,
xx.TEMPLATE_NAME,
CREATED_DATE=SqlFunctions.DateName("day", xx.CREATED_DATE).Trim() + "/" +
SqlFunctions.StringConvert((double)xx.CREATED_DATE.Value.Month).TrimStart() + "/" +
SqlFunctions.DateName("year", xx.CREATED_DATE)
}).ToList();
и дата выхода будет dd/MM / yyyy format
попробуйте это,
var UserTemplates = (from xx in VDC.SURVEY_TEMPLATE
where xx.USER_ID == userid && xx.IS_ACTIVE == 1
select new Attributes
{
TEMPLATE_ID=xx.TEMPLATE_ID,
TEMPLATE_NAME=xx.TEMPLATE_NAME,
dateCreatd = xx.CREATED_DATE
})
.AsEnumerable()
.select(p=>new Attributes
{
TEMPLATE_ID =p.TEMPLATE_ID,
TEMPLATE_NAME=p.TEMPLATE_NAME,
dateString = p.dateCreatd .Value.toString("YYYY-MMM-dd")
}).ToList();
public class Attributes
{
public string TEMPLATE_ID { get; set; }
public string TEMPLATE_NAME { get; set }
public DateTime dateCreatd { get; set; }
public string dateString { get; set; }
}
надеется, что это вам пригодится