Добавить столбец в IEnumerable в c # - PullRequest
6 голосов
/ 17 марта 2011

Я не думаю, что могу добавить поле (столбец) к существующему 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. Но я надеюсь, что есть что-то более элегантное.

Ответы [ 5 ]

6 голосов
/ 17 марта 2011

Как насчет:

var ie2 = ie.Select(x => new { x.Foo, x.Bar, Sum = x.Abc + x.Def });
var grid = new WebGrid(ie2);
4 голосов
/ 17 марта 2011

Вы можете сделать это, используя Select. Попробуйте это:

ie2 = ie.Select( e => new { IE = e, NewParam =  e.X+e.Y });
3 голосов
/ 17 марта 2011
ie2 = ie.Select(v => new {v.a, v.b, c = v.a + v.b});
2 голосов
/ 17 марта 2011

Прежде всего, IEnumerable - это, вероятно, список чего-то - объекта. Это объект, который вы можете расширить.

Вы, вероятно, можете сделать что-то вроде этого:

var ie = db.Query( ... );
var ie2 = ie.Select(i => new MyIe2Object {
   Prop1 = i.Prop1,
   NewProp = i.Prop1 + i.Prop2
});
2 голосов
/ 17 марта 2011

Использование Linq!

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

Также, вероятно, лучше (если вы собираетесь использовать вне этого метода), чтобы этот анонимный тип назывался.

...