Как пройти через IList по одному полю за раз? - PullRequest
0 голосов
/ 09 февраля 2011

Я использую пример кода библиотеки Dynamic LINQ для динамического возврата некоторых данных.Количество возвращаемых столбцов варьируется в зависимости от ввода пользователя.Я перечисляю IQueryable в IList.

Что мне нужно сделать, так это пройти по списку Ilist по одному за раз.Я могу получить по одной строке за раз, перебирая строки в IList, но я не могу на всю жизнь вытащить одно поле из коллекции.

Например, здесь я возвращаю два столбца (сложныйкодируется для тестирования, но в prod он будет изменяться в зависимости от того, какие поля выбирает пользователь):

Dim Dynq = dc.dt _
                    .Where("RUN_ID = """ & runNumber & """ and Upper_Pressure > 95") _
                    .OrderBy("Upper_Pressure") _
                    .Select(" new (Run_ID,Process)")

        Dim something = DirectCast(Activator.CreateInstance(GetType(List(Of )).MakeGenericType(Dynq.ElementType), Dynq), IList)

Теперь я могу вытащить поле из списка, если знаю имя столбца с чем-то вроде:

something.Run_ID.ToString

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

Итак, в итоге, у меня есть Ilist, который выглядитчто-то вроде этого

1  |  Auto
2  |  Auto
3  |  Manual
4  |  Manual

, и я хотел бы получить способ вернуть 1, а затем вернуть Авто, а затем 2 и т. д. *

Я был бы очень признателен за помощь более образованным, чемЯ в этом.

1 Ответ

0 голосов
/ 09 февраля 2011

Ваш вопрос немного сбивает с толку, но я думаю, что вы хотите сгладить свой набор возвратов, чтобы возвращать определенные столбцы как элементы по порядку по столбцу, а затем по строке ...

Один метод, который вы можете использовать, это Оператор SelectMany .

Например (извините в C #, так как мой мозг вращается в одном направлении!):

// Find flattened list of some explicitly specified property values...
var flattened = something.SelectMany(e => new [] { e.Run_ID.ToString(), e.Process.ToString() });

Не уверен, что это то, что вы после, но этоможет быть шагом в правильном направлении.

...