LINQ и проекция для SUM()

Этот запрос возвращает 25 лучших продавцов из нашей базы данных по клиентам:

var query =  from bs in db.MYDATABASE
             where bs.COMPANY == "MY COMPANY"
             group bs by bs.PRODCODE into g
             orderby g.Sum(x => x.MQTY) descending
             select new BestSeller
             {
                 product_code = g.Key,
                 product_description = g.First().DESCRIPTION,
                 total_quantity = g.Sum(x => x.MQTY) 
             };
var top25 = query.Take(25);

В этом вопросе мне сказали, что мне нужно создать проекцию для следующий запрос LINQ в следующей строке:

total_quantity = g.Sum(x => x.MQTY)

Пожалуйста, может кто-нибудь объяснить, что означает проекция и примеры таких?


person Luke    schedule 04.09.2012    source источник
comment
blogs.msdn.com/b/ericwhite/archive/ 22/04/2008/projection.aspx   -  person sloth    schedule 04.09.2012


Ответы (1)


Проекция — это термин, используемый в отношении LINQ, когда вы выбираете несколько полей из запроса и создаете/проецируете его на новый тип. Когда вы делаете select new в своем запросе, вы на самом деле делаете проекцию. В вашем случае вы выбираете такие поля, как g.Key и g.First().DESCRIPTION, из выражения запроса и создаете новый объект типа BestSeller.

Поскольку в вашем исходном вопросеn не было поля total_quantity, назначенного чему-либо, что вот почему Джон Скит попросил вас добавить сумму к вашему прогнозу.

Вам необходимо просмотреть следующие статьи в MSDN о проекции:

Формирование прогнозов
Примеры синтаксиса выражения запроса: проекция

person Habib    schedule 04.09.2012