我看到了相关的问题和答案,但是这些都没有帮助我。 我创建了一个linq查询来获取这样的IEnumerable列表-
**price** **car_name** **location**
23 carA locationA
43 carA locationB
56 carA locationC
12 carB locationA
34 carB locationB
46 carB locationC
现在我只希望每辆车的最低价格行... 预先感谢。
编辑:对不起,我不清楚我的问题,但我也想知道所有位置...我在一个单独的下拉列表中显示。
答案 0 :(得分:0)
我认为类似的方法应该起作用:
cars.GroupBy(c => c.Name)
.Select(g => g.OrderBy(c => c.Price).First());
您按名称对汽车进行分组,然后按价格对每个组进行排序,并获取每个组中的第一辆汽车。
答案 1 :(得分:0)
from cs in myContext.CarStore
group cs by cs.car_name into cgroup
select new {
Car_Name= cgroup.Key,
Price= cgroup.Min(cs=> cs.price)});
我认为这可能会有所帮助。
答案 2 :(得分:0)
您需要根据汽车名称对集合进行分组,然后按价格对每个组进行排序,以使价格最低。
var result = carList.GroupBy(x=>x.Name)
.Select(x=>x.OrderBy(p=>p.Price).First());
如果您想避免订购依据,可以使用Aggregate。
var result = list.GroupBy(x => x.Name)
.Select(g => g.Aggregate((c1, c2) => c1.Price < c2.Price ? c1 : c2));
集合在整个集合中仅迭代一次,以最低的价格跟踪汽车。
无论哪种情况,都输出样本
答案 3 :(得分:0)
其他人提出了将您的汽车分组为具有相同CarName的组的想法。然后,他们订购每个组中的所有CarPrice,然后采用FirstOrDefault CarPrice。
如果您只想要最低的CarPrice,则订购所有CarPrice有点浪费
为此,我使用GroupBy overload with KeySelector, ElementSelector and ResultSelector
var cheapestCars = allCars.GroupBy(
// key selector:
car => car.CarName,
// element selector
car => car.CarPrice,
// result selector:
(carName, pricesOfCarsWithThisCarName) => new
{
CarName = carName,
LowestAvailablePrices = pricesOfCarsWithThisCarName.Min(),
});