ASP.MVC: Repository, in dem IQueryable, jedoch nicht Linq to SQL, DDD enthalten ist

Ich möchte ein DDD-Repository erstellen, das IQueryable Entities zurückgibt, die den zugrunde liegenden Klassen von Linq to SQL ohne Beziehungen entsprechen. Ich kann Entities ohne die Relationen mit einer neuen {field, field, ...} Projektion von Linq select leicht zurückgeben. Wie codiere ich die Repository-Entitätsklasse? Wie kann ich ein Objekt aus dem Repository mit der Repository-Klasse und nicht der Linq to SQL-Klasse zurückgeben und es dennoch mit mehreren Entitäten aus der Linq-Auswahl füllen? Wie würde ich diese zurückgegebene Klasse in meinem ViewModel referenzieren?

Das ist mir sehr neu, daher die offensichtlichen Fehler. Verpasse ich das Boot und sollte nur vollständige Entities aus dem Repository zurückgeben, keine Projektion? Ich würde immer noch die Linq to SQL-Beziehungen entfernen müssen, bevor ich sie aus dem Repository sende. Bin ich total daneben? Ich möchte wirklich den IQueryable-Datentyp beibehalten.

Beispiel: Mein Linq to SQL-Code in meinem Repository:

public class MiniProduct
{
    public MiniProduct( string ProductNo, string Name, string Description, double Price)
    {    this.ProductNo = ProductNo;
         this.Name = Name;
         this.Description = Description;
         this.Price = Price;
    }
}

public IQueryable<MiniProduct> GetProductsByCategory( string productCategory)
{
    return ( from p in db.Products
             from c in db.Categories
             from pc in db.ProductCategories
             where c.CategoryName == productCategory &&
                   c.CatID == pc.CatID &&
                   pc.ProductID == p.ProductID
             select new { p.ProductNo, p.Name, p.Description, p.Price } );
    // how to return IQueryable<MiniProduct> instead of IQueryable<AnonymousType>???
}

Und in der Ansicht (versuchen, stark ViewModel eingeben), was wäre mein Modelldatentyp und wie aus der Ansicht zu verweisen?

<% Page Inherits="System.Web.Mvc.ViewPage<MyStore.Models.MiniProduct>" %>

Bearbeiten:

Cottsak hat den Code aktiviert und zum Laufen gebracht, sodass er sich das Kontrollkästchen verdient. Mark Seemann wies jedoch darauf hin, dass diese Technik Nebenwirkungen verursachen wird. Er hatte Recht damit, dass das Projizieren oder Untereinstellen Ihres POCO schlecht ist. Nachdem ich den Code zum Laufen gebracht hatte, machte ich eine Tonne mehr aus Entity-Objekten, was zu unnötigen Komplikationen führte. Letztendlich habe ich den Code geändert, um Marks Vorschläge widerzuspiegeln.

Hinzufügen zu Cottsaks Vorschlägen: Mein Rückgabewert für das Repository war IQueryable. Der Referenztyp für das Seitenanweisungsmodell war

Inherits="System.Web.Mvc.ViewPage<IQueryable<MyStore.Models.MiniProduct>>"

Auf die Modellfelder wurde zugegriffen von:

Model.SingleOrDefault().ProductNo
Model.SingleOrDefault().Name
...

Und das führte zu einem

foreach (MyStore.Models.MiniProduct myproduct in Model) {}

Vielen Dank für die Antworten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage