Linq clause where avec plusieurs conditions
cette méthode retourne la liste générique, mais il a de multiples condition pour obtenir de sélectionner.
Je suis juste écrit ce à l'aide de if - else if -else if.... donc, de nombreux si d'autre je veux dire
Est-il une façon plus simple de faire cela? Merci.
public List<ProductReqNoDate> GetRequestsQuery(string departmant, int reqStateID, string firstDate, string lastDate)
{
var db = new requestsDBEntities();
var listPrn = new List<ProductReqNoDate>();
if (!string.IsNullOrEmpty(departmant))
{
return (from r in db.requests
where r.departmant== departmant
select new ProductReqNoDate
{
departmant= r.departmant,
reqNo = r.reqNo ,
reqDate = r.reqDate ,
prdctName= stringCutter((from p in db.products where p.reqNo == r.reqNo select p.prdctName).FirstOrDefault())
}).ToList();
}
if (!string.IsNullOrEmpty(firstDate) && !string.IsNullOrEmpty(lastDate))
{
DateTime dtfirstDate = Convert.ToDateTime(firstDate);
DateTime dtlastDate = Convert.ToDateTime(lastDate);
return (from r in db.requests
where r.reqDate <= dtlastDate && r.reqDate >= dtfirstDate
select new ProductReqNoDate
{
departmant= r.departmant,
reqNo = r.reqNo ,
reqDate = r.reqDate,
prdctName= stringCutter((from p in db.products where p.reqNo == r.reqNo select p.prdctName).FirstOrDefault())
}).ToList();
}
}
- Comme linq est exécutée lors du premier accès aux résultats, vous pourriez peut-être mis le premier 'a partir de/où" dans un var et puis en dehors de l'ifs, sélectionnez nouvelle requête sur le récupérées jeu de résultats.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir le cœur de votre requête comme suit:
Puis appliquer
if then else
:Il ne réduit pas
if then else
mais le rend plus sensible, ce qui se passe.1*
vous pouvez trouver une meilleure solution mais je souhaite que cette aide (j'chose), mais je l'utilise : vous pouvez faire l'essai de cette fonction
et vous pouvez appliquer n'importe quelle condition dans votre première liste, mais n'est pas recommandé dans havy application ou plusieurs informations dans la base de données.
2*
Ou vous pouvez simplement faire la date de la première et de la dernière date; par exemple si la date n'est pas définie,faire la première date = 01/01/1900 et de la dernière date Datetime.D'aujourd'hui et de toujours passer votre date de la requête linq
quelque chose comme cela, je n'ai pas compilé et vérifié, mais il devrait vous donner un indice.
EDIT:
si vous voulez utiliser des fonctions sql dans votre filtre ensuite appeler ToList() sur votre table
le problème avec cela est que vous êtes le chargement de l'ensemble de la table en mémoire qui, si fine, si vous ne changez pas de valeurs souvent et si ce n'est pas trop grand.
Une autre approche serait d'écrire une procédure stockée qui serait probablement faire de votre DBA heureux.