我认为我实际上不能将字段(列)添加到现有的IEnumerable中。但我想要的是一个新的IEnumerable,它是从一个带有计算字段的现有IEnumerable派生出来的。使用网页的WebMatrix中的伪代码如下所示:
var db = Database.Open("LOS");
var ie = db.Query(sqlAssignments);
// make a new ie2 that has an extra field
// ??? ie2 <=== ie with new field c = ie.a + ie.b
var grid = new WebGrid( ie2, extra parameters );
我知道如何循环遍历ie中的所有行。但我希望有更优雅的东西。
答案 0 :(得分:6)
怎么样:
var ie2 = ie.Select(x => new { x.Foo, x.Bar, Sum = x.Abc + x.Def });
var grid = new WebGrid(ie2);
答案 1 :(得分:4)
您可以使用Select
执行此操作。试试这个:
ie2 = ie.Select( e => new { IE = e, NewParam = e.X+e.Y });
答案 2 :(得分:3)
ie2 = ie.Select(v => new {v.a, v.b, c = v.a + v.b});
答案 3 :(得分:2)
使用Linq!
var newIe = from item in ie
select new {item.NewField, item.OldFiedl1 etc... }
此外,最好(如果您打算在此方法之外使用)来创建名为的匿名类型。
答案 4 :(得分:2)
首先,IEnumerable
可能是某事物的列表 - 一个对象。这是你可以扩展的对象。
你可以这样做:
var ie = db.Query( ... );
var ie2 = ie.Select(i => new MyIe2Object {
Prop1 = i.Prop1,
NewProp = i.Prop1 + i.Prop2
});