Повторное использование запроса LINQ на основе значения bool - PullRequest
3 голосов
/ 30 марта 2012

Я пытаюсь написать один запрос, который будет включать одно из двух условий на основе входной переменной:

!(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 голосов
/ 30 марта 2012

Нечто подобное может быть:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...