我正在尝试根据输入变量编写一个包含两个条件之一的查询:
!(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
}
}
如果有人能帮助我,我将不胜感激。
答案 0 :(得分: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