LINQ Distinct()

时间:2011-02-28 16:07:18

标签: asp.net-mvc linq

我正在努力在LINQ中获取此sql查询的结果

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

我需要过滤器来返回不同的prod类型?我怎么能这样做?

2 个答案:

答案 0 :(得分:36)

就像这样:

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

答案 1 :(得分:7)

return (from p in qry
       where p.CatId.Equals(CatID)
       select p.Type).Distinct();

这与您提供的SQL Query应该执行的操作相匹配。