2013-09-26 305 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