Linq заказ по расчету - PullRequest
       1

Linq заказ по расчету

4 голосов
/ 20 сентября 2011

У меня есть SQL-запрос, который я недавно создал для инструмента, и я переделываю инструмент в MVC и использую LINQ to Entities.

Кажется, я не могу понять, как сортировать моисписок брендов путем взвешивания моих автомобилей по человеко-часам и значения их тестирования.

Вот SQL-запрос, который у меня был в старом инструменте:

    SELECT Brand.ID, SUM(Car.EstManHours) - SUM(Car.EstManHours) * CAST(AVG(1.00 * TestingStatus.Value) AS DECIMAL(9 , 2)) / 100 AS Weighting
FROM TestingStatus INNER JOIN Car ON TestingStatus.ID = Car.StatusID
    INNER JOIN Team ON Car.TeamID = Team.TeamID 
    RIGHT OUTER JOIN Brand 
    LEFT OUTER JOIN SubCategory ON Brand.ID = SubCategory.BrandID ON Car.SubCategoryID = SubCategory.ID 
WHERE (Car.IsPunted == 'False')
GROUP BY Brand.YearID, Brand.FeatID
HAVING (Brand.YearID = @BrandYearID)
ORDER BY Weighting DESC

Я пробовал это, но могу ли яПомещенный в порядке убывания или возрастания порядок в списке фактически не изменяется, он сохраняет сортировку по Id:

var brands = (from b in _context.Brands
            join s in _context.SubCategorys on f.Id equals s.BrandId
            join c in _context.Cars on s.Id equals c.SubCategoryId
            where (f.YearId == yearId && c.IsPunted == false)
            orderby (c.ManHoursEst - (c.ManHoursEst * c.TestingStatu.Value / 100)) descending 
            select b).Distinct().ToList();

Буду признателен за помощь в этом преобразовании!

Спасибо.

РЕДАКТИРОВАТЬ:

Я сейчас пытаюсь получить порядок и сгруппировать для правильной работы.Следующий запрос перечисляет тонны дубликатов и не упорядочивает их должным образом, так как я не думаю, что мое взвешивание выполнено правильно.

var brands = (from b in _context.Brands
            join s in _context.SubCategorys on f.Id equals s.BrandId
            join c in _context.Cars on s.Id equals c.SubCategoryId
            where (f.YearId == yearId && c.IsPunted == false)
            let weighting = c.ManHoursEst - (c.ManHoursEst * c.TestingStatu.Value / 100)
            orderby weighting descending 
            group b by b.Id).SelectMany(x=>x).ToList();

Есть идеи?

1 Ответ

4 голосов
/ 20 сентября 2011

Distinct не сохраняет сортировку.Это твоя проблема.

Вы можете сделать group by, как в вашем SQL, чтобы имитировать Distinct и выполнять все на стороне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...