C# 基于bool值的LINQ查询重用
我正在尝试编写一个查询,它将基于输入变量包含以下两个条件之一:C# 基于bool值的LINQ查询重用,c#,linq,entity-framework,linq-to-sql,C#,Linq,Entity Framework,Linq To Sql,我正在尝试编写一个查询,它将基于输入变量包含以下两个条件之一: !(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true) 或 我目前的方法,包括前一种情况,如下所示。我已经包括productExists,它将是一个参数,它决定我是想要上面的条件1还是条件2 public IQueryable<ProductImportViewModel> AllImports(
!(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
}
}
如果有人能帮我,我将不胜感激。像这样的事情也许:
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谢谢。我就是这么做的。我只是想知道是否有更简洁的方法来做!
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)
)