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.
Es gibt auch EntityFunctions.TruncateTime
oder DbFunctions.TruncateTime
in EF 6.0
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.
result = from r in result where (r.Reserchflag == true &&
(r.ResearchDate.Value.Date >= FromDate.Date &&
r.ResearchDate.Value.Date <= ToDate.Date)) select r;
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";
&& x.DateTimeValueColumn <= DateTime.Now
Dies wird unterstützt, solange Ihr Schema korrekt ist
&& x.DateTimeValueColumn.Value.Date <=DateTime.Now
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);
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))
}
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");