2012-04-25 6 views
1

J'ai deux requêtes qui travaillent tous les deux, mais besoin de les combiner en une seule requête de travailcombiner deux requêtes en une seule requête

Recherche 1

var now = DateTime.Now; 
    var twoWeeksAgo = now.AddDays(-14); 

    var advert = 
     from m in db.tbl_Property 
     where m.Prop_Update >= twoWeeksAgo && m.Prop_Update <= now 
     select m; 

Recherche 2

var Props = 
     from n in db.tbl_Property. 
     Where(c => c.Prop_AvailableSpaces > 0) 
     select n; 

Toute aide ou un conseil bienvenue

+0

Est-ce que cela signifie que vous voulez que les deux ensembles de résultats dans la requête unique ou que vous voulez avoir appliqué les deux situations en une seule requête? –

+0

pour avoir appliqué les deux conditions dans une seule requête –

Répondre

2

Voulez-vous dire quelque chose comme:

var now = DateTime.Now; 
var twoWeeksAgo = now.AddDays(-14); 

var advert = db.tbl_Property 
       .Where(m => m.Prop_Update >= twoWeeksAgo && m.Prop_Update <= now 
          && m.Prop_AvailableSpaces > 0); 

Ou peut-être la combinaison avec || à la place:

var advert = db.tbl_Property 
       .Where(m => (m.Prop_Update >= twoWeeksAgo && m.Prop_Update <= now) 
          || m.Prop_AvailableSpaces > 0); 

(Notez que je ne l'ai pas utilisé une expression de requête ici que vous êtes que en utilisant une seule clause where.)

0

Peut-être quelque chose comme ceci:

var advert = 
      from m in db.tbl_Property 
      where 
       (m.Prop_Update >= twoWeeksAgo && m.Prop_Update <= now) 
       || (m.Prop_AvailableSpaces > 0) 

      select m; 
3

je changerais ces questions à passe dans la d'origine IQueryable<Property> (ou quel que soit le type est), alors vous pouvez le faire:

var advert = from m in source 
      where m.Prop_Update >= twoWeeksAgo && m.Prop_Update <= now 
      select m; 

passant db.tbl_Property comme dans source, puis:

var Props = from n in filteredProperties 
      where n.Prop_AvailableSpaces > 0 
      select n; 

à savoir la composition

+0

Pourquoi 2 requêtes LINQ lorsque cela peut être effectué en une seule fois. et plus il a déjà 2 requête dont il veut qu'ils soient fusionnés en 1 –

+0

@Nikhil mon hypothèse ici est qu'il y a deux filtres discrets (appliqués séparément) qui doivent être combinés (composé) ** à l'exécution **, en quel cas le ci-dessus est bien. Si l'idée est d'aplatir cela * au moment de la compilation *, alors bien sûr, il suffit de réécrire les deux requêtes. –

0
 var advert = db.tbl_Property.Where(m => m.Prop_Update >= twoWeeksAgo 
    && m.Prop_Update <= now && m.Prop_AvailableSpaces > 0); 
Questions connexes