2011-05-27 3 views
0

Je suis encore en train de monter sur Linq, mais j'espère que quelqu'un peut m'aider à déterminer pourquoi je ne reçois aucun résultat de la méthode suivante qui utilise PredicateBuilder (gOrderCount toujours == 0), toute aide grandement apprécié:Linq PredicateBuilder ne pas retourner les résultats

public IQueryable<TrackingInfo> GetTrackingAllOrders(string custName, string supplier, string assigned) 
    { 
     var predicate = PredicateBuilder.False<TrackingInfo>(); 

     if (custName != null && custName != String.Empty) 
     { 
      predicate = predicate.And(c => c.CustomerName.Contains(custName)); 
     } 
     if (supplier != null && supplier != String.Empty) 
     { 
      predicate = predicate.And(c => c.Supplier.Contains(supplier)); 
     } 
     if (assigned != null && assigned != String.Empty) 
     { 
      predicate = predicate.And(c => c.AssignedTo.Contains(assigned)); 
     } 

     IQueryable<TrackingInfo> oList = null; 

     using (var ctx = new OMS_ISSEntities()) 
     { 
      oList = (from c in ctx.GetSSISTrackingInfoFuction() 
        orderby c.OrderID descending 
        select new TrackingInfo 
        { 
         OrderID = c.OrderID, 
         CustomerName = c.CustomerName ?? String.Empty, 
         ClientServiceID = c.ClientServiceID ?? String.Empty, 
         SiteName = c.SiteName ?? String.Empty, 
         SiteStatus = c.SiteStatus ?? String.Empty, 
         IPNETWCount = c.IPNETWCount ?? 0, 
         VOIPCount = c.VOIPCount ?? 0, 
         AirCardCount = c.AirCardCount ?? 0, 
         TicketProductType = c.TicketProductType ?? String.Empty, 
         SiteAddress = c.SiteAddress ?? String.Empty, 
         LCONPhone = c.LCONPhone ?? String.Empty, 
         Supplier = c.Supplier ?? String.Empty, 
         SupplierOrderNumber = c.SupplierOrderNumber ?? String.Empty, 
         ConfFOCDate = c.ConfFOCDate, 
         DSLNumber = c.DSLNumber ?? String.Empty, 
         DSLLineType = c.DSLLineType ?? String.Empty, 
         JournalNote = c.JournalNote ?? String.Empty, 
         JournalLastUpdate = c.JournalLastUpdate, 
         Project = c.Project ?? String.Empty, 
         SiteICB = c.SiteICB, 
         SiteISSDueDate = c.SiteISSDueDate, 
         SiteISSInfo = c.SiteISSInfo ?? String.Empty, 
         AssignedTo = c.AssignedTo ?? String.Empty, 
         SiteSubmitDate = c.SiteSubmitDate, 
         SiteID = c.SiteID ?? String.Empty, 
         UserLogin = c.UserLogin ?? String.Empty, 
         ClientSiteType = c.ClientSiteType ?? String.Empty, 
         OpenJeop_Supp = c.OpenJeop_Supp, 
         PastDueFOC = c.PastDueFOC, 
         DaysSinceLastJNUpdate = c.DaysSinceLastJNUpdate, 
         SiteStatusID = c.SiteStatusID, 
         AssignedToID = c.AssignedToID, 
         SupplierID = c.SupplierID, 
         MasterCustID = c.MasterCustID, 
         MaxJeopSuppDate = c.MaxJeopSuppDate, 
         EstimatedTTU = c.Sit_EstTTU 
        }).ToList().AsQueryable().Where(predicate); 

      gOrderCount = oList.Count(); 


      if (gOrderCount > 1500) //we limit max number of records returned to 1500 
      { 
       return null; 
      } 

      return oList.AsQueryable(); 
     } 
    } 
+0

Merci beaucoup pour vos commentaires. En changeant simplement le prédicat var = PredicateBuilder.False (); à var predicate = PredicateBuilder.True (); Cela a commencé à fonctionner. Je vais regarder dans la mise en œuvre de certaines autres suggestions, mais merci encore pour le retour rapide. –

Répondre

3

Je soupçonne que c'est le problème:

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

donc, vous commencez avec un prédicat qui ne correspond pas à quoi que ce soit , puis en ajoutant plus de restrictions à elle, efficace finir avec Quelque chose comme:

var results = entities.Where(c => false && c.CustomerName.Contains("fred")); 

Cela ne correspondra clairement à rien.

Vous voulez utiliser pour commencer:

var predicate = PredicateBuilder.True<TrackingInfo>(); 

afin que votre requête se termine comme quelque chose comme:

var results = entities.Where(c => true && c.CustomerName.Contains("fred")); 
+0

Je suppose que vous vouliez dire 'PredicateBuilder.True ()', non? – svick

+0

@svick: Euh, oui. Doh doh! –

0

Je le décomposer un peu avant d'essayer de tout faire à la une fois que. Essayez ceci avant de créer vos objets TrackingInfo. Ensuite, vous pouvez vérifier les résultats de la requête et modifier vos prédicats pour vous assurer qu'ils sont corrects.

Questions connexes