2012-04-12 10 views
0

Ich versuche den Internet-Shop mit MVC3 aufzubauen. Ich bin mit EF und ich habe eine Schnittstelle mit meiner Einheit Kontext zu arbeiten:Lambda Ausdrücke in MVC 3

public interface IBaseRepository<T> where T : class, IBase, new() 
{ 
    IQueryable<T> Get(); 
} 

und eine abstrakte Klasse mit dieser Schnittstelle zu arbeiten:

public abstract class BaseRepository<T> : 
     IBaseRepository<T> where T : class, IBase, new() 
{ 
    protected abstract ObjectSet<T> EntitySet { get; } 

    public virtual IQueryable<T> Get() 
    { 
     return from obj in EntitySet select obj; 
    } 
} 

So kann ich mit dieser Lösung mit verschiedenem arbeiten Tabellen in meiner Datenbank (SQL). Ich kann noch keine Bilder posten. Also werde ich versuchen, meine Datenbank zu beschreiben:

[Product] - [CategoryProduct (ProductID, CategoryID)] - [Kategorie (Shortname)]

  1. Tabelle Produkt
  2. Tabelle Kategorie mit Feldshort
  3. Tabelle CategoryProduct mit Feldern ProductID, CategoryID zur Herstellung von Viele-zu-viele-Links.

(Wir sind immer näher an das Problem ....)

Ich habe eine Methode, die „Shortname“ aus der Tabelle „Kategorie“ („Repository“ nehmen die DbContext nur eine für Tabelle - „Kategorie“) Und ich brauche IEnumerable <> die Produkte in meiner Ansicht zurückzukehren:

public ActionResult GetProductInCategory(string shortName) 
{ 
     IEnumerable<Product> = repository.Get()...... 
     return View(); 
} 

So, hier ist das Problem: ich brauche eine Abfrage, um Produkt aus diesen drei Tabellen mit Lambda zu nehmen, aber Ich kann nicht verstehen, wie man das macht.

Ich kann linq nicht verwenden, weil ich direkten Zugriff nur auf eine Tabelle in der gesamten Datenbank habe.

Entschuldigung für schlechte eplanation, wenn Sie irgendwelche Fragen über Architektur haben, um die ganze Ansicht zu bekommen, werde ich versuchen, Ihnen zu antworten.

+0

Sie möchten also Daten mit einem Lambda (Sie benötigen LINQ) zurückgeben, aber Sie können die Daten nicht erhalten, weil Sie keine Berechtigung haben? : S – mattytommo

+0

Ich denke, es ist nicht, dass er keine Erlaubnis hat, Problem ist sein 'IBaseRepository ' wird gezwungen, nur zu tippen, 'T'. – gideon

Antwort

0

Ich gehe davon aus/erraten, die aus der Nutzung der EntitySet Sie verwenden EntityFramework und Sie haben diese Struktur in Ihnen Entitätsklassen

Category 
+ShortName 
+EntityCollection<CategoryProduct> CategoryProduct 

CategoryProduct 
+Product 

So könnten Sie diese Abfrage in Ihrer Linq tun:

BaseRepository<Category> repository = //get your CATEGORY repository 
IEnumerable<Product> = repository.Get().Where(c=> c.ShortName == shortName) 
             .SelectMany(cp => cp.CategoryProduct) 
             .Select(p => p.Product).ToList(); 
+0

Danke für die Antwort. Es funktioniert super! – AlexSolovyov