2011-02-28 109 views
20

我在得到這個SQL查詢的結果在LINQ工作LINQ鮮明的()

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

這是我的資料庫查詢:

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

過濾器:

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

我需要篩選器才能返回disti nct prod類型?我怎樣才能做到這一點?

回答

35

只要是這樣的:

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

請注意,我已經改變了返回類型 - 它應該匹配任何的ProdInfo.Type的類型。

您可能會發現更容易閱讀用於整個查詢的擴展方法,如果查詢表達式本身是相當簡單:

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(); 

這符合你的所提供的SQL查詢應該做的。