2011-09-28 4 views
2

J'ai une table (j'utilise Entity Model) et j'ai filtré cette table en utilisant la requête LINQ qui fonctionne correctement. Maintenant, je veux filtrer les enregistrements sur la base du tableau de dates. Je ne suis pas en mesure de mettre en œuvre la clause sur tableau des datesEnregistrements de requête LINQ basés sur le tableau de date

filteredList = leadsNewAndScheduled.Where(lead => 
       (LeadTypeIDs.Contains(lead.TYPE_ID.ToString()) || 
       LeadTypeIDs == string.Empty) && 
       (priorityIDs.Contains(lead.PRIORITY_ID.ToString()) || 
       priorityIDs == string.Empty) && 
       (((lead.EXPIRED_ON <= dateExpiry || 
       Convert.ToDateTime(lead.EXPIRED_ON) == DateTime.Today.Date) && 
       lead.STATUS_ID == (int)Enumerations.LeadStatus.New) || 
       lead.STATUS_ID == (int)Enumerations.LeadStatus.Active) && 
       (lead.START_TIME IN (arrAppointmentDates)) 
      ).ToList(); 

Je veux votre aide à suivre

(lead.START_TIME IN (arrAppointmentDates)) 

Merci à l'avance.

Répondre

1

J'ai résolu ce problème en déclarant la liste des dates, puis en appliquant la clause contains dans la requête LINQ.

exemple:

//list of dates. 
List<DateTime> arrAppointmentDates; 

//change in query 
arrAppointmentDates.Contains(Convert.ToDateTime(lead.START_TIME).Date) 
2

Utilisez Predicate Builder

Rédigez votre requête sans condition de date comme

var query = leadsNewAndScheduled.Where(lead => 
       (LeadTypeIDs.Contains(lead.TYPE_ID.ToString()) || 
       LeadTypeIDs == string.Empty) && .... 

Ensuite, écrivez

var predicate = PredicateBuilder.False<Lead>(); 

    foreach (DateTime date in dates) 
    { 
    DateTime temp = date; 
    predicate = predicate.Or (p => p.START_TIME == temp); 
    } 

    var result = query.Where(predicate).ToList(); // Don't call ToList() earlier 

Cependant s'il vous plaît noter que si vous utilisez Entity Framework vous devez appeler AsExpandable() sur l'ensemble d'entités avant d'appliquer des prédicats comme suit:

return objectContext.Products.AsExpandable().Where (predicate); 
+0

Merci hasan, J'ai créé un PredicateBuilder de classe de votre source donnée et mise en œuvre code suivant; var predicate = PredicateBuilder.False (); foreach (dateheure dans arrAppointmentDates) { DateTime temp = date; predicate = predicate.Or (p => Convert.ToDateTime (p.START_TIME) .Date == temp); } filteredList = filteredList.Where (prédicat) .ToList(); Mais il me donne l'erreur suivante 'System.Collections.Generic.List ' ne contient pas de définition pour 'Où'. Toute aide dans ce domaine ... – Kash

+0

Avez-vous un espace de noms System.Linq inclus? –

+0

Oui, j'ai inclus System.Linq – Kash

Questions connexes