开发者

Linq orderby calculation

开发者 https://www.devze.com 2023-04-06 09:32 出处:网络
I have an SQL query that I built for a tool a while ago and I\'m remaking the tool in MVC and using LINQ to Entities.

I have an SQL query that I built for a tool a while ago and I'm remaking the tool in MVC and using LINQ to Entities.

I can't seem to figure out how to sort my list of Brands by weighting my Cars by man hours and their testing value.

Here's the SQL query I had in the old tool:

    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

I've tried this, but whether I put descending or ascending the order doesn't actually change in the list, it keeps the sorting by 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.I开发者_开发技巧d equals c.SubCategoryId
            where (f.YearId == yearId && c.IsPunted == false)
            orderby (c.ManHoursEst - (c.ManHoursEst * c.TestingStatu.Value / 100)) descending 
            select b).Distinct().ToList();

Would appreciate help on this conversion!

Thanks.

EDIT:

I'm now trying to get the order by and group by to work correctly. The following query is listing tons of duplicates and not ordering properly as I don't think my weighting is done correctly.

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

Any ideas?


Distinct does not preserve sorting. That is your problem.

You could do a group by like in your SQL to mimic the Distinct and perform everything server side.

0

精彩评论

暂无评论...
验证码 换一张
取 消