基于bool值重用LINQ查询

时间:2012-03-30 10:53:51

标签: c# linq entity-framework linq-to-sql

我正在尝试根据输入变量编写一个包含两个条件之一的查询:

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

如果有人能帮助我,我将不胜感激。

1 个答案:

答案 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