ASP.MVC: репозиторий, который отражает IQueryable, но не Linq to SQL, DDD

Я хочу создать репозиторий DDD, который возвращает объекты IQueryable, которые соответствуют базовым классам Linq to SQL, за вычетом любых отношений. Я легко могу вернуть Entities минус отношения с Linq select new {field, field, ...} проекция. Как мне кодировать класс Repository Entity? Как бы я возвратил объект из репозитория, имеющий класс репозитория, а не класс Linq to SQL, и все равно заполнил бы его несколькими сущностями из выбора Linq? Как бы я сослался на этот возвращенный класс в моей ViewModel?

Я очень новичок в этом, поэтому очевидные ошибки. Я скучаю по лодке и должен возвращать только полные сущности из хранилища, а не проекцию? Мне все еще нужно удалить отношения Linq to SQL, прежде чем я отправлю их из хранилища. Я полностью не в курсе? Я действительно хочу сохранить тип данных IQueryable.

Например, мой код Linq to SQL в моем хранилище:

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

И в представлении (пытаясь строго ввести ViewModel), что будет тип данных моей модели и как ссылаться на представление?

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

Редактировать:

Котцак наделил полномочиями код и заставил его работать, поэтому он зарабатывает флажок. Тем не менее, Марк Симанн отметил, что этот метод будет вызывать побочные эффекты. Он был прав в том, что проецирование или поднабор вашего POCO - это плохо. После того, как код заработал, я закончил тем, что сделал еще одну вещь из объектов сущности, что вызывает ненужные сложности. В конечном итоге я изменил код, чтобы отразить предложения Марка.

Чтобы добавить к предложениям Котцака: Возвращаемое значение хранилища было IQueryable. Тип ссылки модели директивы страницы был

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

Доступ к полям модели:

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

И это привело к

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

Спасибо вам обоим за ответы.

Ответы на вопрос(2)

Ваш ответ на вопрос