J'ai une table et la condition suivante de la requête: si le paramètre A est null prendre tout, sinon, l'utiliser dans la requête. Je sais comment faire cela en 2 étapes:
List<O> list = null;
if (A = null)
{
list = context.Obj.Select(o => o).ToList();
}
else
{
list = context.Obj.Where(o.A == A).ToList();
}
4 Réponses :
Que diriez-vous:
IEnumerable<O> query = context.Obj;
if (A != null)
{
query = query.Where(o => o.A == A);
}
var list = query.ToList();
De cette façon, la condition a == null code> serait évaluée pour chaque élément de la collection, bien que plus lisible, je ne pense pas qu'il soit totalement correct.
@ AS-CII, pas nécessairement. Ce serait le cas pour Linq aux objets. Mais cette requête ressemble à Linq à SQL ou quelque chose de similaire.
@svick - Bon point. Quoi qu'il en soit, je pense que c'est quelque chose qui ne devrait pas faire partie du où code> clause. Je veux dire, est la vérification de la nullabilité d'une variable client significative pour la requête?
@ AS-CII: Il est possible que la traduction de Linq à SQL remarquerait qu'il s'agit d'une valeur «vraie» constante et non d'envoi de la valeur ou même de l'une des clauses suivantes. Je ne dis pas que c'est particulièrement gentil - juste que c'est ce qui a été demandé.
Je voudrais probablement écrire la requête comme ceci:
IQueryable<O> query = context.Obj;
if (A != null)
query = query.Where(o => o.A == A);
var list = query.ToList()
ESSAYER
context.Obj.Where(a => A != null && a.A == A).ToList()
J'ai opté pour
var list = context.Obj.Where(o => A.HasValue ? o.a == A : true);
résolu mon problème. Lorsque vous avez des paramètres NULL capables pour les actions de contrôleurs.
Je pense que vous n'avez pas besoin du
SELECT () code> là.J'espère que vous voulez dire
a == null code>! (C # devrait garder cela de compiler, mais il est toujours préférable de faire en sorte que le code affiché est sous forme compilable appropriée. Il est important de critiquer le code posté parce que serait compilé [mais non travaillé comme prévu] dans certaines langues.)