Преобразовать данные в IEnumerable <T>для передачи в Result <T>(данные IEnumerable <T>); - PullRequest
4 голосов
/ 10 мая 2011

У меня есть объект с именем Result<T>, у которого есть конструктор, который принимает аргумент IEnumerable<T>. Я хотел бы иметь возможность передать данные, если это возможно.

Я пытался datatable.AsEnumerable(), но, когда я связывался с данными, он жаловался, что «MyProperty» не является полем или свойством типа «DataRow», что имеет смысл, поскольку «MyProperty» не является свойством «DataRow». ', но это был столбец в моей таблице данных.

Есть ли способ преобразовать данные в нечто, что я могу передать в объект Result и при этом привязать его, скажем, к сетке?

Ответы [ 4 ]

3 голосов
/ 10 мая 2011

Если вы можете написать функцию, которая может создать экземпляр объекта с MyProperty, используя один DataRow, то вы можете сделать это следующим образом:

datatable.AsEnumerable().Select(MyConversionFunction);
1 голос
/ 10 мая 2011

Я закончил тем, что использовал Linq для преобразования данных в массив анонимных объектов.

Dim objs = From row In dt Select New With {
    .Id = row.Field(Of Integer)("Id"),
    .Count = row.Field(Of Integer)("Count")
}

Затем я создал универсальную функцию, которая будет использовать вывод типов для получения массива анонимных объектов в конструктор объекта Result

Private Function GetResult(Of T)(ByVal data As IEnumerable(Of T)) As Result(Of T)
    Return New Result(Of T)(Nothing, data)
End Function

Вызывается с помощью Dim result = GetResult(objs)

0 голосов
/ 18 сентября 2017

Если вы хотите преобразовать набранный тип данных в коллекцию EnumerableRowCollection, вы можете использовать следующее:

EnumerableRowCollection<YourTypedRow> typedRowCollection = datatable.AsEnumerable().Cast<YourTypedRow>();
0 голосов
/ 10 мая 2011

Как насчет

table.Rows.Cast<DataRow>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...