Estoy tratando de construir la tienda de Internet usando MVC3. Estoy usando EF y tengo una interfaz para trabajar con el contexto de mi entidad:

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

Y una clase abstracta para trabajar con esta interfaz:

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

Entonces puedo usar esta solución para trabajar con diferentes tablas en mi base de datos (SQL). Todavía no puedo publicar imágenes. Entonces intentaré describir mi base de datos:

[Producto] - [CategoryProduct (ProductID, CategoryID)] - [Category (ShortName)]

  1. Producto de mesa
  2. Categoría de tabla con campo ShortName
  3. Tabla CategoryProduct con campos ProductID, CategoryID para crear un enlace de varios a varios.

(Nos estamos acercando al problema ...)

Tengo un método, que toma "ShortName" de la Tabla "Categoría" ("repositorio" es el dbcontext solo para una tabla - "Categoría") Y necesito devolver IEnumerable <> de Productos en mi vista:

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

Entonces, aquí está el problema: necesito hacer una consulta para tomar el producto de estas 3 tablas usando lambda, pero no puedo entender cómo hacerlo.

No puedo usar linq porque solo tengo acceso directo a una tabla en toda la base de datos.

Perdón por la mala explicación, si tienes alguna pregunta sobre arquitectura para obtener la vista completa, intentaré responderte.

0
AlexSolovyov 12 abr. 2012 a las 13:11
Entonces, ¿desea devolver datos usando una lambda (necesitará LINQ), pero no puede obtener los datos porque no tiene permiso? :S
 – 
mattytommo
12 abr. 2012 a las 13:15
Creo que no es que no tenga permiso, el problema es que su IBaseRepository<T> está limitado a escribir solo, T.
 – 
gideon
12 abr. 2012 a las 13:36

1 respuesta

La mejor respuesta

Supongo / supongo que por el uso de EntitySet está usando EntityFramework y tiene esta estructura en sus Clases de entidad

Category
+ShortName
+EntityCollection<CategoryProduct> CategoryProduct

CategoryProduct
+Product

Entonces podrías hacer esto en tu consulta linq:

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
gideon 12 abr. 2012 a las 13:32