Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.04.2020
Сообщений: 14
MS SQL

Совместить данные из 2х таблиц в Dictionary<Operation, string>()

14.09.2022, 00:13. Показов 919. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток. У меня есть 2 модели на основе которых построены 2 таблицы
C#
1
2
3
4
5
6
7
8
9
    public class Operation
    {
        public int Id { get; set; }
        public OperationType Type { get; set; }
        public int CategoryId { get; set; }
        public decimal Amount { get; set; }
        public DateTime Date { get; set; }
        public string? Description { get; set; }
    }
C#
1
2
3
4
5
    public class Category
    {
        public int Id { get; set; }
        public string? Name { get; set; }
    }
Класс контекста:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    internal class ApplicationContext : DbContext
    {
        public DbSet<Operation> Operations { get; set; }
        public DbSet<Category> Categories { get; set; }
 
        public ApplicationContext()
        {
            Database.EnsureCreated();
        }
 
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=BudgetDB;Trusted_Connection=True");
        }
    }
Я пытаюсь получить словарь Dictionary<Operation, string>(), где каждой Operation будет соответствовать имя категории, так как мне надо вывести в DataGrid операции c соответствующими им названиями категорий, а не id, но я не могу додумать как это сделать.

C#
1
2
3
4
5
6
7
8
9
10
11
    public static Dictionary<Operation, string> GetOperationsDictionary()
    {
        Dictionary<Operation, string> dictionary;
 
        using (var context = new ApplicationContext())
        {
            dictionary = new Dictionary<Operation, string>(/* тут затрудняюсь как сформулировать запрос */);
        }
 
        return dictionary;
    }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2022, 00:13
Ответы с готовыми решениями:

Данные загрузить в коллекцию Dictionary<string,string> скопировать в списки, перемешать и сформировать ключ
здравствуйте) в файле есть вопросы и ответы. данные из файла нужно загрузить в коллекцию Dictionary&lt;string,string&gt;. скопировать...

Как выдернуть данные из Dictionary<string,string>.Enumerator?
Есть библиотека xNet. Когда делаешь http запрос вот так: var ss = request.Post(&quot;https://mysite.ru&quot;, b).EnumerateHeaders(); то в...

Как правильно считать и совместить данные с нескольких таблиц?
Привет! Есть 3 таблицы: teams: id|name|country_id 1|Одуванчики|ru 2|Ромашки|ua 3|Тюльпанчики|usa

3
0 / 0 / 0
Регистрация: 11.04.2020
Сообщений: 14
14.09.2022, 19:02  [ТС]
Получилось создать запрос через Join следующим образом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static Dictionary<Operation, string?> GetOperationsDictionary()
    {
        Dictionary<Operation, string?> dictionary;
 
        using (var context = new ApplicationContext())
        {
           var query = context.Operations.Join(context.Categories, op => op.CategoryId, cat => cat.Id,
                (op, cat) => new {op.Type, op.CategoryId, op.Amount, op.Date, op.Description, cat.Name});
 
           dictionary = query.ToDictionary(op => new Operation(op.Type, op.CategoryId, op.Amount, op.Date, op.Description), cat => cat.Name);
        }
 
        return dictionary;
    }
Также пришлось дополнить модель Operation конструктором для создания операции через передачу параметров в конструктор (ранее такой необходимости не было), поэтому класс модели стал таким:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public class Operation
    {
        public int Id { get; set; }
        public OperationType Type { get; set; }
        public int CategoryId { get; set; }
        public decimal Amount { get; set; }
        public DateTime Date { get; set; }
        public string? Description { get; set; }
 
        public Operation(OperationType type, int categoryId, decimal amount, DateTime date, string? description)
        {
            Type = type;
            CategoryId = categoryId;
            Amount = amount;
            Date = date;
            Description = description;
        }
 
        public Operation() { }
    }
Не уверен, что такое решение в целом корректно, так как выглядит костыляво
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,234
14.09.2022, 20:50
Лучший ответ Сообщение было отмечено John_Hellhound как решение

Решение

Цитата Сообщение от John_Hellhound Посмотреть сообщение
где каждой Operation будет соответствовать имя категории,
Можно так не изголяться, а просто добавить navigation property в класс Operation и получать его.
Предполагается, что Category => Operation как one-to-many. У вас ведь уже есть FK, значит можно добавить и свойство.
C#
1
2
3
4
5
6
7
8
9
10
11
public class Operation
    {
        public int Id { get; set; }
        public OperationType Type { get; set; }
        public int CategoryId { get; set; }
        public decimal Amount { get; set; }
        public DateTime Date { get; set; }
        public string? Description { get; set; }
 
        public Category Category { get;set;}
    }
Добавлено через 3 минуты
Возможно, придется немного сконфигурировать сущность Operation.
2
0 / 0 / 0
Регистрация: 11.04.2020
Сообщений: 14
15.09.2022, 15:22  [ТС]
IamRain, Спасибо, все оказалось намного проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.09.2022, 15:22
Помогаю со студенческими работами здесь

Как архивировать Dictionary<string, Dictionary<string, decimal[,]>>
Программа периодически создает Dictionary&lt;string, Dictionary&lt;string, decimal&gt;&gt; большого размера. Как сжать gzip такой словарь перед его...

Преобразовать из Dictionary<string, string> в Dictionary<string, List<string>>
Желательно лямбдой. Буду благодарен за варианты.

Dictionary<string, int>. В DataGridView показать данные из этого словаря
Есть у меня свой класс, внутри которого словарь, например Dictionary&lt;string, int&gt;. Мне нужно в DataGridView показать данные из этого...

Dictionary<Tuple<string,string>, Dictionary<int,int>> dict - возможно ли?
Собственно вопрос в заголовке. Возможно ли использовать объект вида Dictionary&lt;Tuple&lt;string,string&gt;, Dictionary&lt;int,int&gt;&gt; ...

Как совместить строку типа String, имеющуюся в коде и функцию, принимающую std::string ?
Доброго времен суток)) У меня такая проблема: есть строка типа String^ , а функция принимает string. Не знаю как их...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru