Puis-je utiliser si clause avec Linq où?
Oui, vous pouvez aimer:
var query = someList.Where(a => a == "something");
if (condition)
{
query = query.Where(b => b == "something else");
}
var result = query.ToList();
Étant donné que Where
produit une IQueryable
, l'exécution est reportée au ToList
dans mon exemple afin que vous puissiez enchaîner Where
s autant que vous le souhaitez, puis l'exécuter après avoir rempli toutes vos conditions.
var query = someList.Where(a => (someCondition)? a == "something" : true);
donc, si 'someCondition' est faux, 'Où' sera ignoré.
Utiliser la méthode WhereIf
d'extension à avaialbe in linq
Exemple
if (SearchControlMain.PostingID.HasValue)
query = query.Where(q => q.PostingID == SearchControlMain.PostingID);
au lieu d'en haut, optez pour le dessous
query = query.WhereIf(SearchControlMain.CategoryID.HasValue, q => q.CategoryID == SearchControlMain.CategoryID);
Vous ne savez pas si cela est approprié, mais c'est très utile, vous pouvez facilement utiliser ifs avec des clauses conditionnelles où:
var r = (from p in productinfo.tblproduct
where p.Accountid == accountid
select p);
if (uuf1 != null)
r = r.Where(p => p.UnitUserField1 == uuf1);
if (uuf2!= null)
r = r.Where(p => p.UnitUserField2 == uuf2);
Donc, la clause where sera modifiée en fonction de ce qui est dans UUF1 ou UUF2, c’est-à-dire que vous n’avez que UUF1 avec info, auquel cas il faudra l’ignorer et ignorer la clause UUF2, vous pourriez avoir les deux dans lequel il faut prendre les deux peut ne rien avoir dans UUF1 ou 2 et votre clause where prendra simplement le accountid comme la clause where.
Dans mon cas, il y avait deux "conditionnels", qui dépendaient des clés de recherche.
var query = db.Package.Include("SomeThing")
.Where(item => searchString1 == null || searchString1 == "" || item.Contains(searchString1))
.Where(item => searchString2 == null || searchString2 == "" || item.Contains(searchString2));
...
J'ai eu un scénario comme celui-ci où je devais vérifier null dans la liste elle-même. C'est ce que j'ai fait.
items = from p in items
where p.property1 != null //Add other if conditions
select p;
// Use items the way you would use inside the if condition
Mais comme Kelsey l'a fait remarquer, cela fonctionnerait aussi -
items = items.Where(a => a.property1 != null);
from item in items
where condition1
&& (condition2 ? true : condition3)
select item
Voici comment vous pouvez le faire avec la syntaxe noob Linq . Cela s'applique à la condition3 uniquement si la condition2 est fausse . Si la condition2 est vraie, vous faites essentiellement && true
qui n'a aucun effet sur la clause where.
Donc, il s’agit essentiellement de ceci:
if(condition2)
{
from item in items
where condition1
select item
else
{
from item in items
where condition1
&& condition3
select item
}
Je ne sais pas quelle est la question, mais une réponse possible pourrait être:
Oui,
list.Where(item => { if (Foo(item)) return true; else return false; });
Ce serait une façon compliquée de dire quelque chose de simple, cependant.