2017-05-31 3 views
-3

Donc, j'ai une requête qui obtient des données correctement mais dès que j'essaie de filtrer l'instruction linq avec une où entre les dates, je reçois systématiquement zéro résultat.Linq entre les dates

 var query= Enumerable.Empty<CustomClass>().AsQueryable(); 

     query= (from auto in db.AutoInvs 
      join deal in db.Deals on new { inv = auto.INVUID, client = auto.CLIENTID, acct = auto.ACCOUNT} equals new {inv = deal.INVUID,client = deal.CLIENTID, acct = (int?) deal.ACCOUNT} 
      join dmCust in db.DMCusts on new {inv = auto.INVUID, client = auto.CLIENTID, acct = auto.ACCOUNT.ToString()} equals new {inv = dmCust.INVUID, client = dmCust.CLIENTID, acct = dmCust.ACCOUNT} 
      join act in db.Acts on new { inv = auto.INVUID, client = auto.CLIENTID, acct = auto.ACCOUNT.ToString()} equals new { inv = act.INVUID, client = act.CLIENTID, acct = act.Key } 
      where auto.DATAPROCESSEDDATE == null && auto.INVUID != "" 
      select new CustomClass() 
      { 
       AutoInv = auto, 
       Deal = deal, 
       DmCust = dmCust, 
       Act = act 
      }); 
    var filteredData = query.Where(c => c.AutoInv.DATESOLD >= dateFrom.Value && c.AutoInv.DATESOLD <= dateTo.Value).AsQueryable(); 
    Console.WriteLine(filteredData.ToList().Count); 
+0

Veuillez lire [ask] et créer un [mcve]. Une seule ligne de code est pertinente ici, et vos données d'entrée et vos valeurs datetime sont manquantes. – CodeCaster

+0

Je soupçonne auto.DATAPROCESSEDDATE n'est jamais nulle. L'objet DateTime ne peut pas être nul. Donc, je voudrais essayer auto.DATAPROCESSEDDATE.year <1980. L'objet DateTime par défaut est 1900. – jdweng

Répondre

2

En utilisant cette version dépouillée (et mes propres données), il fonctionne pour moi:

var query = Enumerable.Empty<Tbl1>().AsQueryable(); 

DateTime? dateFrom = new DateTime(2017, 5, 10); 
DateTime? dateTo = new DateTime(2017, 5, 20); 

query = (from auto in db.Tbl1s 
     select auto); 

var filteredData = query.Where(c => c.StartDate >= dateFrom.Value 
           && c.StartDate <= dateTo.Value).AsQueryable(); 
filteredData.Dump(); 

Un problème possible, vous pouvez avoir est que dateTo serait le point final exclusif - - Sauf si DATESOLD est exactement minuit, vous n'en obtiendrez pas à la date de fin.