2011-02-28 11 views
20

estoy trabajando en conseguir los resultados de esta consulta SQL en LINQLINQ distintas()

SELECT DISTINCT(Type) 
FROM Product 
WHERE categoryID = @catID 

esta es mi consulta repositorio:

public IQueryable<ProdInfo> GetProdInfo() 
     { 

      var data = from u in db.Prod 
         select new ProdInfo 
         { 
          PID = u.PID, 
          CatID = u.CatID,       
          LastChanged = u.LastChanged, 
          ChangedBy = u.ChangedBy,        
          Type = u.Type, 
         }; 

      return data; 
     } 

filtro:

public static IQueryable<ProdInfo> GetDistinctProdType(this IQueryable<ProdInfo> qry,int CatID) 
      { 
       return from p in qry 
         where p.CatID.Equals(CatID) 
         select p; 
      } 

Necesito el filtro para devolver el disti nct prod tipo? ¿Cómo puedo hacer esto?

Respuesta

35

simplemente así:

public static IQueryable<ProdType> GetDistinctProdType(
    this IQueryable<ProdInfo> query, 
    int categoryId) 
{ 
    return (from p in query 
      where p.CatID == categoryId 
      select p.Type).Distinct(); 
} 

Tenga en cuenta que he cambiado el tipo de retorno - que debe coincidir con cualquiera que sea el tipo de ProdInfo.Type es.

Tal vez le resulte más fácil de leer para utilizar los métodos de extensión para toda la consulta si la expresión de consulta en sí es bastante simple:

public static IQueryable<ProdType> GetDistinctProdType(
    this IQueryable<ProdInfo> query, 
    int categoryId) 
{ 
    return query.Where(p => p.CatID == categoryId) 
       .Select(p => p.Type) 
       .Distinct(); 
} 
7
return (from p in qry 
     where p.CatId.Equals(CatID) 
     select p.Type).Distinct(); 

Esto coincide con lo que su provisto de consultas SQL debería estar haciendo.

Cuestiones relacionadas