2017-10-09 22 views
-2

Quelle est la meilleure façon d'utiliser plusieurs où les conditions? Actuellement, j'ai écrit comme ça.Quelle est la meilleure façon d'utiliser plusieurs où linq C# conditions ou comment optimiser?

var v = _context.table1.Where(x => x.column1>= 0 && x.column1<= 10) 
    .Where(x => x.column2>= 0 && x.column2<= 10) 
    .Where(x => x.column3>= 0 && x.column3<= 10) 
    .Where(x => x.column4>= 0 && x.column4<= 10) 
    .Where(x => x.column5>= 0 && x.column5<= 10) 
    .Where(x => x.column6>= 0 && x.column6<= 10); 
+1

Quel est en fait le problème/question ici? –

+1

Il y a plusieurs problèmes avec ce code et, je le crains, votre question est trop large pour StackOverflow. Probablement, vous pouvez obtenir une meilleure réponse sur [Code Review] (https://codereview.stackexchange.com/), mais vous devrez clarifier les types de 'db',' table', et 'MinifiedSiteEvent' pour faire votre question est valide ici. –

+2

Que voulez-vous dire par "meilleur"? Cela dépend de ce que vous essayez de faire – DiskJunky

Répondre

0

Vous pouvez déplacer la logique de comparaison dans l'objet. Si votre préoccupation

void Main() 
{ 
    var list = new List<MinifiedSiteEvent>{ 
     new MinifiedSiteEvent{ A = 1, B = 1, C = 1, D = 1, E = 1, F = 1 }, 
     new MinifiedSiteEvent{ A = 2, B = 2, C = 2, D = 2, E = 2, F = 2 }, 
     new MinifiedSiteEvent{ A = 3, B = 3, C = 3, D = 3, E = 3, F = 3 }, 
    }; 

    var filter1 = 2; 
    var filter2 = 3; 

    var result = list.Where(x => x.IsInRange(filter1, filter2));  
} 

class MinifiedSiteEvent 
{ 
    public int A { get; set; } 
    public int B { get; set; } 
    public int C { get; set; } 
    public int D { get; set; } 
    public int E { get; set; } 
    public int F { get; set; } 

    public bool IsInRange(int item1, int item2) 
    { 
     return A >= item1 && A <= item2 
      && B >= item1 && B <= item2 
      && C >= item1 && C <= item2 
      && D >= item1 && D <= item2 
      && E >= item1 && E <= item2 
      && F >= item1 && F <= item2; 
    } 
} 
0

est le multiple « où », vous pouvez simplement rejoindre tous les « où » dans une « où » déclaration:

var v = _context.table1.Where(x => x.column1>= 0 && x.column1<= 10 
    && x.column2>= 0 && x.column2<= 10 
    && x.column3>= 0 && x.column3<= 10 
    && x.column4>= 0 && x.column4<= 10 
    && x.column5>= 0 && x.column5<= 10 
    && x.column6>= 0 && x.column6<= 10); 
+0

Merci pour vos suggestions J'ai obtenu une solution en utilisant la requête Dynamic Linq –