2016-03-25 13 views
0

ich ein "Produkt" Tabelle haben die "Tegs"LINQ - Abfrage-Tabelle mit verwandten Daten

public class Product 
{ 
    public Product() 
    { 
     Tegs = new List<Teg>(); 
    } 
    [Key] 
    public int Id { get; set; } 
    public string ProductName { get; set; } 
    public virtual ICollection<Teg> Tegs { get; set; } 
    public virtual ICollection<Product> RelatedProducts { get; set; } 
} 

Dies ist die Tegs bezogen hat:

public class Teg 
{ 
    public Teg() 
    { 

    } 

    public int Id { get; set; } 
    public string TegName { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

}

Bei einem Produkt ID, LINQ verwenden Ich möchte alle Produkte abrufen, die mindestens ein teg als ausgewähltes Produkt haben.

Ich verwende diesen Code:

Product product = db.Product.Include(u => u.Tegs).Where(u => u.Id == id).Single(); 
List<int> tegid = product.Tegs.Select(c => c.Id).ToList(); 
IEnumerable<Product> relatedProducts = db.Product.Include(u => u.Tegs).Where(p => p.Tegs.Any(t => tegid.Contains(t.Id))); 

Frage 1: Wie kann ich von dem relatedProducts das Produkt mit der ID ausschließen?

Frage 2: Wie kann meine Liste innerhalb der Linq-Abfrage für die verwandten Produkte verschachteln?

Antwort

0

Bei Ihrer ersten Frage, wenn ich richtig verstanden habe, möchten Sie das Produkt mit der angegebenen productId aus der relatedProducts-Ergebnisliste ausschließen. In diesem Fall müssen Sie nur eine weitere Bedingung zu Ihrem Wo() Klausel wie folgt hinzuzufügen:

IEnumerable<Product> relatedProducts = db.Product 
        .Include(u => u.Tegs) 
        .Where(p => p.Tegs.Any(t => tegid.Contains(t.Id)) && p.Id != id); 

Und über Ihre zweite Frage, ich bin nicht ganz sicher, was hier der Punkt. Vielleicht wollten Sie die zweite und dritte Abfrage in einem einzigen Roundtrip zu db kombinieren?