2

虽然我对此没有硬性要求,但我想操作列表中除最后一个之外的所有元素。例如,假设一个类 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
});

这有效,除了列表中的最后一个元素将有一个逗号,我不想要它......但我仍然想要列表中的最后一个项目。我不能这么简单的 string.Join 因为我将它传递给一个视图,该视图在 Name 元素周围有很多模板代码。我正在尝试做的事情可能吗?

4

4 回答 4

4

试试这个:

var cars = _db.GetAllCars().Reverse().Select((x, i) => new Car {
    Name = x.Name + (i == 0 ? "" : ", "),
    Tires = x.Tires
}).Reverse();
于 2013-07-22T17:43:47.770 回答
2

Lolo 的改进版(给分)

var cars = _db.GetAllCars().Select((x, i) => new Car {
    Name = (i == 0 ? "" : ", ") + x.Name  ,
    Tires = x.Tires
});
于 2013-07-22T18:20:24.337 回答
0

关于什么:

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()扩展方法。

于 2013-07-22T17:47:09.323 回答
-1

如果您真的想在从数据源检索后立即对其进行操作:

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
}});
于 2013-07-22T17:55:26.560 回答