Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 1
Регистрация: 29.03.2014
Сообщений: 57
1

Linq преобразовать DataTable в Dictionary<int,List<int>

10.11.2018, 11:24. Показов 2484. Ответов 1
Метки нет (Все метки)

Добрый день, помогите пожалуйста, со следующей задачей. Есть DataTable состоящий из 2 колонок: первая колонка id группы, вторая колонка id компонента группы(например id класса и id ученика). Задача состоит что бы превратить этот DataTable в Dictionary для увеличения производительности сравнения двух групп. Циклами это делать очень долго, поэтому думаю Linq выручит в этой ситуации. Вот пример:
DataTable:
1 100
1 101
1 102
2 300
2 101
2 100
3 100
3 400
Мне нужно получить Dictionary с ключами 1, 2, 3. И что бы по ключу 1 например лежали значения 100,101, 102. По логике что то такое получится:var result = dt.Select().GroupBy(x => x[0].ToString()).ToDictionary(x => x.ToString(), x => x);
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2018, 11:24
Ответы с готовыми решениями:

Dictionary<int,List<int>>. Добавиль элемент в лист
Здравствуйте, подскажите, пожалуйста. Вот у меня есть такая штучка Dictionary&lt;int,List&lt;int&gt;&gt;. Мне...

Сравнение переменной int с ячейкой DataTable
int y = 0, oi = 0; DtSet.Tables.Columns.DataType = typeof(Int32); if (y != DtSet.Tables.Rows) {...

Что означает (private static Complex w(int k, int N)) k и N?
using System; using System.Numerics; namespace FFT { public class FFT { ///...

Как преобразовать string в int?
Как преобразовать строку string в целое число? string s = &quot;5&quot;; int i = (int)(s); Так не...

1
Администратор
Эксперт .NET
13755 / 11146 / 4553
Регистрация: 17.03.2014
Сообщений: 22,493
Записей в блоге: 1
10.11.2018, 13:56 2
Лучший ответ Сообщение было отмечено Diablik как решение

Решение

Diablik, так например
C#
1
2
3
4
var dict = dt.Rows.OfType<DataRow>()
    .GroupBy(r => (int)r["id1"])
    .Select(g => new { g.Key, List = g.Select(r => (int)r["id2"]).ToList() })
    .ToDictionary(_ => _.Key, _ => _.List);
С помощью цикла кстати будет не сильно длиннее и лучше
C#
1
2
3
4
5
6
7
8
9
10
11
var dict = new Dictionary<int, List<int>>();
foreach (DataRow row in dt.Rows)
{
    int id1 = (int)row["id1"];
    List<int> list;
    if (!dict.TryGetValue(id1, out list))
    {
        dict.Add(id1, list = new List<int>());
    }
    list.Add((int)row["id2"]);
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2018, 13:56

Преобразование IEnumerable<int> в int[]
Существуют два множества, представленные int. Необходимо найти их объединение, пересечение,...

Варианты конвертации bool/byte/int в byte/int
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А...

Перевод из int[] в int
Помогите ребят пж, я новичек Как перевести из массива в int? Заранее спасибо!

SELECT TOP (INT) в LINQ
Собственно никак не могу найти элементарный запрос. в SQLе это было 'SELECT TOP 10', и отбирает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.