基于布尔值重用LINQ查询

3
我正在尝试编写一个单一的查询语句,该语句将根据输入变量包含两个条件之一:
!(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个回答

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语句。


谢谢。这就是我所做的。我只是想知道有没有更简洁的方法来完成它! - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接