3 Stimmen

Wiederverwendung von LINQ-Abfragen basierend auf boolschen Werten

Ich versuche, eine einzige Abfrage zu schreiben, die eine der beiden Bedingungen auf der Grundlage einer Eingabevariablen enthält:

!(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true)

o

(from o in db.Products.Where(x => x.Company_ID == cid && x.IsDeleted != true)

Meine derzeitige Methode, die die erste Bedingung abdeckt, sieht folgendermaßen aus. Ich habe productExists, die der Parameter, der bestimmt, ob ich will, Bedingung #1 oder #2 von oben sein wird enthalten.

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

Wenn mir jemand dabei helfen könnte, wäre ich sehr dankbar.

2voto

Arion Punkte 30771

Vielleicht so etwas wie dies:

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)
            )

Sie könnten es auch so machen:

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)
    )

Beide Abfragen ergeben die gleiche Sql

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X