преобразование / приведение ISingleResult - список значений в DataTable без циклов - PullRequest
1 голос
/ 07 октября 2010

Я использую Linq to Sql . Когда My StoredProcedure Выполнение его результата будет возвращено в виде IMultipleResults .

Я конвертирую его в ISingleResults , и он может быть Приведен к списку .

Так что мне нужно Преобразовать его в DataTable , чтобы я мог Связать его с набором данных и Передать значения в пользовательский интерфейс.

Но я хочу такой метод, где я могу конвертировать его без LOOP .

Пожалуйста, помогите любому телу.

Для уточнения свяжитесь со мной.

Благодарю вас.

1 Ответ

0 голосов
/ 08 октября 2010

Сначала вы можете захотеть посмотреть, можете ли вы привести свой список к BindingList или сделать что-то вроде этого:

BindingListX = New BindingList(Of elementX)(QueryResult.ToList())

Возможно, вы сможете связать это. Если это не сработает, то вот еще один вопрос: хотите ли вы вообще не использовать цикл в вашем коде или просто не видите цикл в вашем коде? Можно создать функцию расширения, которая выполняет преобразование:

public static class HelperFunctions
    {
        public static void Map<T>(this IEnumerable<T> source, Action<T> func)
        {
            foreach (T i in source)
                func(i);
        }

        public static DataTable ToDataTable<T>(this IEnumerable<T> source)
        {
            var dt = new DataTable();
            var properties = typeof(T).GetProperties();
            dt.Columns.AddRange(properties.Select(x => new DataColumn(x.Name, x.PropertyType)).ToArray());
            source.Select(x => dt.NewRow().ItemArray = properties.Select(y => y.GetValue(x, null)).ToArray()).Map(x => dt.Rows.Add(x));
            return dt;
        }
    }

Но, как вы можете видеть, другая функция расширения 'Map' - это не что иное, как foreach, который можно использовать встроенным. Если это не то, чего вы хотите, тогда я приношу свои извинения и постараюсь придумать другой путь.

Стоит также отметить, что я не уверен, что присвоение Item Array - лучший способ заполнить строку, поэтому, если она не работает, пожалуйста, дайте мне знать, чтобы я мог набросать другую версию функции.

Надеюсь, это поможет!

...