2012-03-30 7 views
3

に基づいて再使用してLINQクエリ私は入力変数に基づいて、2つの条件のいずれかが含まれます、単一のクエリを記述しようとしています:bool値

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

または

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

私の現在の方法は、前の状態をカバーしています。私はproductExistsを含みました。これは、上から条件#1か#2かを決定するパラメータになります。

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 
      } 
} 

誰もがこれで私を助けることができれば、私ははるかに高く評価されると思い。

答えて

2

多分このような何か:

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) 
      ) 

あなたもそれを行うことができ、このような何か:

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) 
    ) 

両方のクエリが同じSQLで

+0

感謝を発生します。それは私がしたこととほぼ同じです。私はそれを行うより簡潔な方法があるかどうかだけ疑問に思った! – Nick

+0

答えを更新しました – Arion