wake-up-neo.com

Linq where Klausel vergleicht nur Datumswert ohne Zeitwert

var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
        && x.DateTimeValueColumn <= DateTime.Now)
    .Select(x => x);

Die obere Abfrage funktioniert korrekt.
Ich möchte nur den Datumswert überprüfen.
Aber oberes Abfrageprüfungsdatum + Zeitwert.

In traditionellen Mssql könnte ich Abfrage wie folgt schreiben.

SELECT * FROM dbo.tbl_MyTable
WHERE 
CAST(CONVERT(CHAR(10), DateTimeValueColumn, 102) AS DATE) <= 
            CAST(CONVERT(CHAR(10),GETDATE(),102) AS DATE)
AND
Active = 1

Könnte mir jemand einen Vorschlag machen, wie ich nur den Datumswert in Linq überprüfen könnte.

46
Frank Myat Thu

Es gibt auch EntityFunctions.TruncateTime oder DbFunctions.TruncateTime in EF 6.0

95
Johann Blais

Einfache Problemumgehung, um nur den Datumsteil zu vergleichen

var _My_ResetSet_Array = _DB
                    .tbl_MyTable
                    .Where(x => x.Active == true && 
                               x.DateTimeValueColumn.Year == DateTime.Now.Year
                            && x.DateTimeValueColumn.Month == DateTime.Now.Month
                            && x.DateTimeValueColumn.Day == DateTime.Now.Day);

Da der 'Date'-Datentyp von linq to entity nicht unterstützt wird, sind Jahr, Monat und Tag' int 'Datentypen und werden unterstützt.

18
Pranay Rana
 result = from r in result where (r.Reserchflag == true && 
    (r.ResearchDate.Value.Date >= FromDate.Date && 
     r.ResearchDate.Value.Date <= ToDate.Date)) select r;
2
Jatin

EDIT

So vermeiden Sie diesen Fehler: Das angegebene Typmitglied 'Date' wird in LINQ to Entities nicht unterstützt. Es werden nur Initialisierer, Entitätsmitglieder und Entitätennavigationseigenschaften unterstützt.

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true)
                         .Select(x => x).ToList();

 var filterdata = _My_ResetSet_Array
        .Where(x=>DateTime.Compare(x.DateTimeValueColumn.Date, DateTime.Now.Date)  <= 0 );

Die zweite Zeile ist erforderlich, da LINQ to Entity die Datumseigenschaft nicht in eine SQL-Abfrage konvertieren kann. Es ist also besser, zuerst die Daten abzurufen und dann den Datumsfilter anzuwenden.

EDIT

Wenn Sie nur den Datumswert des Datums vergleichen möchten, verwenden Sie 

DateTime.Date Property - Ruft die Datumskomponente dieser Instanz ab.

Code für Sie 

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true
     && DateTime.Compare(x.DateTimeValueColumn.Date, DateTime.Now.Date)  <= 0 )
                         .Select(x => x);

Wenn es so ist, dann nutze es

DateTime.Compare-Methode - Vergleicht zwei Instanzen von DateTime und gibt eine Ganzzahl zurück, die angibt, ob die erste Instanz vor der, die zweite Instanz oder dieselbe ist.

Code für Sie 

var _My_ResetSet_Array = _DB
                .tbl_MyTable
                .Where(x => x.Active == true
                  && DateTime.Compare(x.DateTimeValueColumn, DateTime.Now)  <= 0 )
                         .Select(x => x);

Beispiel 

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";
2
Pranay Rana

&& x.DateTimeValueColumn <= DateTime.Now

Dies wird unterstützt, solange Ihr Schema korrekt ist

&& x.DateTimeValueColumn.Value.Date <=DateTime.Now
1
Joe Stellato

In einem ähnlichen Fall habe ich folgenden Code verwendet:

DateTime upperBound = DateTime.Today.AddDays(1); // If today is October 9, then upperBound is set to 2012-10-10 00:00:00
return var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
        && x.DateTimeValueColumn < upperBound) // Accepts all dates earlier than October 10, time of day doesn't matter here
    .Select(x => x);
1
takemyoxygen

Arbeitscode:

     {
        DataBaseEntity db = new DataBaseEntity (); //This is EF entity
        string dateCheck="5/21/2018";
        var list= db.tbl
        .where(x=>(x.DOE.Value.Month
              +"/"+x.DOE.Value.Day
              +"/"+x.DOE.Value.Year)
             .ToString()
             .Contains(dateCheck))
     }
0
Soharab Shaikh

Versuche dies,

var _My_ResetSet_Array = _DB
    .tbl_MyTable
    .Where(x => x.Active == true
         && x.DateTimeValueColumn <= DateTime.Now)
    .Select(x => x.DateTimeValueColumn)
    .AsEnumerable()
    .select(p=>p.DateTimeValueColumn.value.toString("YYYY-MMM-dd");
0
Karthic G