使用Linq对列表中除最后一个元素外的所有元素执行操作
本文关键字:元素 操作 执行 最后一个 Linq 列表 使用 | 更新日期: 2023-09-27 18:24:21
虽然我对此没有硬性要求,但我希望操作列表中除最后一个元素外的所有元素。例如,假设一个类Cars
public class Car {
public string Name { get; set; }
public List<Tire> Tires { get; set; }
}
var cars = _db.GetAllCars().Select(x => new Car {
Name = x.Name + ", ",
Tires = x.Tires
});
这是有效的,除了列表中的最后一个元素会有逗号,我不想要。。。但我还是想要清单上的最后一项。我不能这么简单的字符串。在我将其传递给一个视图时加入,该视图在Name元素周围有很多模板代码。我想做的事情可能吗?
试试这个:
var cars = _db.GetAllCars().Reverse().Select((x, i) => new Car {
Name = x.Name + (i == 0 ? "" : ", "),
Tires = x.Tires
}).Reverse();
改进版的Lolo(在那里打分)
var cars = _db.GetAllCars().Select((x, i) => new Car {
Name = (i == 0 ? "" : ", ") + x.Name ,
Tires = x.Tires
});
关于:
var allCars = _db.GetAllCars();
var cars = allCars.Select((x, i) => new Car { //where i is the index
Name = x.Name + (i != allCars.Count - 1 ? ", " : string.Empty), //or "." if you need a comma
Tires = x.Tires
});
编辑:
正如@newStackExchangeInstance所说,如果_db.GetAllCars()
返回ICollection
,则此操作有效,否则您需要将其放入列表中:
var allCars = _db.GetAllCars().ToList();
或者只使用Count()
扩展方法。
如果您真的想在从数据源检索后立即操作它:
var allCars = _db.GetAllCars().Select(x => new Car {
Name = x.Name,
Tires = x.Tires
}).ToList();
var cars = allCars.Take(allCars.Count() - 1).Select(x => new Car
{
Name = x.Name + ", ",
Tires = x.Tires
}).Concat(new[] { new Car {
Name = allCars.Last().Name,
Tires = allCars.Last().Tires
}});