2012-03-30 4 views
3

Je suis en train d'écrire une seule requête qui comprendra l'une des deux conditions, à partir d'une variable d'entrée:Réutiliser requête LINQ basée sur la valeur bool

!(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true) 

ou

(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true) 

Ma méthode actuelle, couvrant la première condition, est la suivante. J'ai inclus productExists, qui sera le paramètre qui détermine si je veux la condition # 1 ou # 2 ci-dessus.

public IQueryable<ProductImportViewModel> AllImports(int id, bool productExists) 
{ 
    return (from t1 in db.Products_Staging 
      where (t1.ImportFileId == id) && !(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true) 
               select o.ProductName).Contains(t1.ProductName) 
      select new ProductImportViewModel 
      { 
       Id = t1.Id 
      } 
} 

Si quelqu'un pouvait m'aider avec ceci, je serais très apprécié.

Répondre

2

Quelque chose comme ça peut-être:

where (t1.ImportFileId == id) && 
      (
       productExists==true 
       && 
       !(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true). 
               Select(o=> o.ProductName).Contains(t1.ProductName) 
      ) 
      || 
      (
       productExists==false 
       && 
       (from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true). 
               Select(o=> o.ProductName).Contains(t1.ProductName) 
      ) 

Vous pouvez aussi faire quelque chose comme ceci:

var query=(from o in db.Products 
      .Where(x => x.Company_ID == cid && x.IsDeleted != true). 
      Select(o=> o.ProductName); 
------ 
where (t1.ImportFileId == id) && 
    (
     productExists && !query.Contains(t1.ProductName) 
    ) 
    || 
    (
     !productExists && query.Contains(t1.ProductName) 
    ) 

Les deux requêtes entraînera la même sql

+0

Merci. C'est à peu près ce que j'ai fait. Je me demandais juste s'il y avait une façon plus succincte de le faire! – Nick

+0

Mis à jour la réponse – Arion

Questions connexes