2010-07-30 6 views
4

Puis-je améliorer cette requête LINQComment améliorer cette requête LINQ pour la recherche

var filter = from Dep in deptlist 
where (Dep.DepNm.StartsWith(txt1.Text.ToLower()) 
    || Dep.DepNm.StartsWith(txt1.Text.ToUpper()) 
    ||Dep.DepNm.Contains(txt1.Text)) 
select Dep; 
+0

De quel fournisseur LINQ s'agit-il? Cela compte. LINQ-to-Objects? LINQ-to-SQL? etc? –

+0

Est-ce Linq-to-Sql? – cjk

+0

Merci. C'est LINQToObjects et je fais observablecollection – joey

Répondre

3

Actuellement, vous faites un .Text, .Text.ToUpper() et .Text.ToLower()de la valeur fixe par article; (le ToUpper() etc étant relativement cher); vous pouvez soulever ceci:

string text = txt1.Text, upper = text.ToUpper(), lower = text.ToLower(); 
var filter = from Dep in deptlist 
      where Dep.DepNm.StartsWith(lower) || Dep.DepNm.StartsWith(upper) 
        || Dep.DepNm.Contains(text)) 
      select Dep; 

Je suppose ici que .DepNm est trivialement pas cher. Si cela est en fait une propriété coûteuse à interroger, vous pouvez utiliser let pour minimiser les appels:

var filter = from Dep in deptlist 
      let name = Dep.DepNm 
      where name.StartsWith(lower) || name.StartsWith(upper) 
        || name.Contains(text)) 
      select Dep; 
1
var filter = from Dep in deptlist 
where Dep.where(d => d.DepNm.ToUpper().Conatins(txt1.Text.ToUpper())) 
select Dep; 

S'il est possible dans votre solution, ajouter des expressions lambda. Donc, vous avez enregistré au moins une ligne :)


EDIT: Oublie ce que je disais, ce qui est beaucoup plus courte:

var filter = deptlist.where(d => d.DepNm.ToUpper().Conatins(txt1.Text.ToUpper())).ToList(); 
+0

Je ne pense pas que votre réponse soit la même que la LINQ dans la question OP –

0

Je pense qu'il est plus rapide parce qu'il ya moins de conditions.

var filter = from Dep in deptlist 
where (Dep.DepNm.StartsWith(txt1.Text, StringComparison.OrdinalIgnoreCase)) 
||Dep.where(d => d.DepNm.ToUpper().Contains(txt1.Text.ToUpper())) 
select Dep; 
0

réponse est bonne, je vous renvoie regarder ce lien relation avec la recherche et l'amélioration use query linq in search with empty field

c'est multiple choix pour remplir ou ne pas remplir textbox, mais cette réponse est de travail lorsque:
vous êtes un remplissage de champ ou de deux remplissage de champ ou .. 7e remplissage de champ.

Questions connexes