Подтвердить что ты не робот

LINQ Distinct()

Я работаю над получением результатов этого SQL-запроса в 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;
            }

Мне нужен фильтр, чтобы вернуть отдельный тип prod? Как я могу это сделать?

4b9b3361

Ответ 1

Просто так:

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

Ответ 2

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

Это соответствует тому, что должен делать ваш SQL-запрос.