2013-09-26 246 views
5

我有一个Linq结果我只需要从DateTime只选择Date
我的查询是这样的:Linq - 从日期选择日期时间

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努力,这是给像一个错误:

The specified type member 'Date' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

+1

什么问题呢? – I4V

+0

xx.CREATED_DATE.ToShortDateString()?什么格式是CREATED_DATE? – andrewb

回答

15

如果是为了演示目的,那么你可以使用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(); 
+0

+1用于识别XY问题。 – Aron

+5

在较新版本的实体框架中,'EntityFunctions'已被'DbFunctions'取代。 –

-1

也许这?

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(); 
+0

它没有像'.Date'这样的属性。它只有像'.Value.Date'这样的属性,并且不起作用并给出如下错误: LINQ to Entities不支持指定的类型成员'Date'。仅支持初始化程序,实体成员和实体导航属性。 – RealSteel

+0

@RealSteel这应该工作,如果你完全按照它。原因在于'.Date'调用在Linq中运行到Object而不是Linq to Entities。仍然。这不是我的首选解决方案。 – Aron

+1

@Aron这也不是我的首选解决方案。如果为获得显示目的而获得该值,我甚至不会在查询中将它作为日期。该控件应该有一个用于显示值的FormatString。 – Dbuggy

0
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(); 
+0

查询正文必须以select子句或group子句结尾 – RealSteel

+0

@RealSteel – Damith