7

我认为我实际上不能将字段(列)添加到现有的 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 中的所有行。但我希望有更优雅的东西。

4

5 回答 5

6

怎么样:

var ie2 = ie.Select(x => new { x.Foo, x.Bar, Sum = x.Abc + x.Def });
var grid = new WebGrid(ie2);
于 2011-03-17T11:44:24.087 回答
4

您可以使用Select. 试试这个:

ie2 = ie.Select( e => new { IE = e, NewParam =  e.X+e.Y });
于 2011-03-17T11:45:00.987 回答
3
ie2 = ie.Select(v => new {v.a, v.b, c = v.a + v.b});
于 2011-03-17T11:44:56.350 回答
2

使用 Linq!

var newIe = from item in ie
            select new {item.NewField, item.OldFiedl1 etc... }

此外,最好(如果您打算在此方法之外使用)命名该匿名类型。

于 2011-03-17T11:45:01.900 回答
2

首先,这IEnumerable可能是一个东西的列表——一个对象。那是您可以扩展的对象。

您可能可以执行以下操作:

var ie = db.Query( ... );
var ie2 = ie.Select(i => new MyIe2Object {
   Prop1 = i.Prop1,
   NewProp = i.Prop1 + i.Prop2
});
于 2011-03-17T11:46:05.320 回答