2013-09-26 21 views
5

Ich habe eine Linq Ergebnis von dem ich nur Date von DateTime auswählen muss.
Meine Suche geht dies wie:Linq - Wählen Sie Datum von 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(); 

ist das möglich? Jede Hilfe würde sehr geschätzt werden.

CREATED_DATE - `datetime` datatype 

Eigentlich bin ich Bindung an eine Steuerung als DataSource und die Steuerung wird die Anzeige sowohl Date and Time .Aber ich will date nur angezeigt werden soll.

Wenn ich mit CREATED_DATE = xx.CREATED_DATE.Value.Date versuchen, es wird geben einen Fehler wie:

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

+1

Und was ist das Problem? – I4V

+0

xx.CREATED_DATE.ToShortDateString()? Welches Format hat CREATED_DATE? – andrewb

Antwort

15

Wenn es für Präsentationszwecke ist, können Sie DataFormatString Eigenschaft verwenden. Wenn Sie beispielsweise eine Datenquelle an eine GridView binden, können Sie Folgendes tun:;

<asp:BoundField DataField="CREATED_DATE" ... 
    DataFormatString="{0:d}" ../> 

Else können Sie EntityFunctions.TruncateTime() verwenden, die das Eingangsdatum ohne den Zeitabschnitt zurückkehrt.

EntityFunctions.TruncateTime(xx.CREATED_DATE) 

Ihre Abfrage wäre wie;

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 zum Erkennen des XY-Problems. – Aron

+5

In den neueren Versionen von Entity Framework wurde 'EntityFunctions' durch' DbFunctions' ersetzt. –

-1

Vielleicht ist dies?

+0

Es hat keine Eigenschaft wie '.Date'. Es hat nur eine Eigenschaft wie '.Value.Date' und das funktioniert nicht und gibt einen Fehler wie: Der angegebene Typ Member 'Date' wird in LINQ to Entities nicht unterstützt. Es werden nur Initialisierungs-, Entitäts- und Entitätsnavigationseigenschaften unterstützt. – RealSteel

+0

@RealSteel Dies sollte funktionieren, wenn Sie es vollständig befolgen. Der Grund dafür ist, dass der '.Date'-Aufruf in Linq zu Object und nicht zu Linq to Entities läuft. Immer noch. Es ist nicht meine bevorzugte Lösung. – Aron

+1

@Aron Es ist auch nicht meine bevorzugte Lösung. Wenn der Wert für Anzeigezwecke erhalten wird, wäre es mir nicht einmal wichtig, ein Datum aus der Abfrage heraus zu setzen. Das Steuerelement sollte einen FormatString für den Anzeigewert haben. – 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

Ein Abfragetext muss mit einer Auswahlklausel oder einer Gruppenklausel enden – RealSteel

+0

@RealSteel Antwort aktualisiert – Damith