LINQ Distinct()

Pin*_*inu 19 linq asp.net-mvc

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

SELECT DISTINCT(Type)
FROM  Product
WHERE categoryID = @catID
Run Code Online (Sandbox Code Playgroud)

这是我的存储库查询:

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;
        }
Run Code Online (Sandbox Code Playgroud)

过滤:

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

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

Jon*_*eet 37

就像这样:

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

请注意,我已经更改了返回类型 - 它应该匹配任何类型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();
}
Run Code Online (Sandbox Code Playgroud)


msa*_*het 8

return (from p in qry
       where p.CatId.Equals(CatID)
       select p.Type).Distinct();
Run Code Online (Sandbox Code Playgroud)

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