var _My_ResetSet_Array = _DB
.tbl_MyTable
.Where(x => x.Active == true
&& x.DateTimeValueColumn <= DateTime.Now)
.Select(x => x);
La requête supérieure fonctionne correctement.
Mais je veux vérifier uniquement la valeur de la date.
Mais date de vérification de la requête supérieure + valeur de l'heure.
En mssql traditionnel, je pourrais écrire une requête comme ci-dessous.
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
Quelqu'un pourrait-il me suggérer comment vérifier la valeur de date dans Linq.
Il y a aussi EntityFunctions.TruncateTime
ou DbFunctions.TruncateTime
dans EF 6.0
Solution de contournement simple à ce problème pour comparer la partie de date uniquement
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);
Étant donné que le type de données 'Date' n'est pas pris en charge par linq to entity, où Année, Mois et Jour sont des types de données 'int' et sont pris en charge.
result = from r in result where (r.Reserchflag == true &&
(r.ResearchDate.Value.Date >= FromDate.Date &&
r.ResearchDate.Value.Date <= ToDate.Date)) select r;
MODIFIER
Pour éviter cette erreur: Le membre de type spécifié 'Date' n'est pas pris en charge dans LINQ to Entities. Seuls les initialiseurs, les membres d'entité et les propriétés de navigation d'entité sont pris en charge.
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 );
La deuxième ligne est obligatoire car LINQ to Entity ne peut pas convertir la propriété date en requête SQL. Il est donc préférable de récupérer d'abord les données, puis d'appliquer le filtre de date.
MODIFIER
Si vous voulez simplement comparer la valeur de date de la date et heure, utilisez
DateTime.Date
Property - Obtient le composant de date de cette instance.
Code pour vous
var _My_ResetSet_Array = _DB
.tbl_MyTable
.Where(x => x.Active == true
&& DateTime.Compare(x.DateTimeValueColumn.Date, DateTime.Now.Date) <= 0 )
.Select(x => x);
Si c'est comme ça, utilisez
DateTime.Compare, méthode - Compare deux instances de DateTime et renvoie un entier indiquant si la première instance est antérieure, identique ou ultérieure à la seconde instance.
Code pour vous
var _My_ResetSet_Array = _DB
.tbl_MyTable
.Where(x => x.Active == true
&& DateTime.Compare(x.DateTimeValueColumn, DateTime.Now) <= 0 )
.Select(x => x);
Exemple
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
Ceci est supporté tant que votre schéma est correct
&& x.DateTimeValueColumn.Value.Date <=DateTime.Now
Dans un cas similaire, j'ai utilisé le code suivant:
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);
Code de travail:
{
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))
}
Essaye ça,
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");