Выражение DataTable, ссылающееся на другой столбец DataTable

У меня есть 2 таблицы данных, DT1 и DT2.

DT1 имеет столбцы A1, B1, а DT2 имеет столбцы A2, B2. Я бы хотел добавить выражение в A1лайк A1 = A2 + B2

Возможно ли это сделать без объединения или слияния двух таблиц данных, это похоже на то, как работают электронные таблицы?

Есть ли другой способ сделать это, какие-либо другие структуры данных или методы, кроме DataTable, которые могли бы это сделать?

Я вижу, что DataTable не сможет вывести из строки таблицы, которым принадлежат столбцы? Возможно ли, что мы можем добавить эти 2 DataTables к DataSet, а затем сделать выражение, относящееся к таблицам, присутствующим в DataSet.

Редактировать:

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

Вы можете использовать эту библиотеку github.com/codingseb/ExpressionEvaluator

lets do it 19.11.2022 10:35

@viveknuna Нужно ли мне создавать переменные для ячеек с данными, а затем передавать их в оценщик выражений? Или есть какой-то другой механизм для этого?

Anchovy 19.11.2022 11:04
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
0
2
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

См. код ниже

            DataTable dt1 = new DataTable();
            dt1.Columns.Add("ID", typeof(string));
            dt1.Columns.Add("A1", typeof(int));
            dt1.Columns.Add("B1", typeof(int));

            DataTable dt2 = new DataTable();
            dt2.Columns.Add("ID", typeof(string));
            dt2.Columns.Add("A2", typeof(int));
            dt2.Columns.Add("B2", typeof(int));

            DataSet ds = new DataSet()
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);

            foreach(DataRow row in dt1.AsEnumerable())
            {
                DataRow match = dt2.AsEnumerable().Where(x => x.Field<string>("ID") == row.Field<string>("ID")).First();
                row["A1"] = match.Field<int>("A2") + match.Field<int>("B2");

            }

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

Anchovy 19.11.2022 11:07

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

jdweng 19.11.2022 11:35

В качестве примера такого выражения, как ((A1/A2)*B1) + B2, я пытался использовать это как строку выражения в третьем параметре dt.Columns.Add(), однако это не разрешает ссылки на перекрестные таблицы.

Anchovy 19.11.2022 11:41

Вам нужно будет использовать формулу и создать набор данных с обеими таблицами в наборе. Затем см. learn.microsoft.com/en-us/dotnet/api/… и learn.microsoft.com/en-us/dotnet/api/…

jdweng 19.11.2022 11:45

Будет ли набор данных автоматически определять таблицы, которым принадлежат столбцы, например. если мы используем ((A1/A2)*B1) + B2, будет ли DataSet знать, что A1 принадлежит Dt1, а A2 принадлежит Dt2

Anchovy 19.11.2022 11:57

Если бы я использовал эту формулу в столбце в Dt2, я получил бы исключение Cannot find column [A1]

Anchovy 19.11.2022 12:03

используйте что-то вроде ds.Tables[dt1]

jdweng 19.11.2022 12:46

Пробовал поставить выражение на одну из таблиц вот такdt2.Columns.Add("c2", typeof(int), "(ds.Tables[dt1].Columns[a1] + ds.Tables[dt1].Columns[b1]) - (a2 + b2)"); Но выдает 'Syntax error: Missing operand after '[dt1]' operator.'

Anchovy 19.11.2022 13:42

См. SalesSet.Relations.Add во втором примере: learn.microsoft.com/en-us/dotnet/api/…

jdweng 19.11.2022 16:21

Я думаю, что мы делаем что-то не так, даже после добавления отношения я получаю ту же ошибку. Я добавил такое отношение DataRelation rel = new DataRelation("one2one", ds.Tables["dt1"].Columns["id"], ds.Tables["dt2"].Columns["id"]); ds.Relations.Add(rel);

Anchovy 19.11.2022 19:56

Вы добавили таблицы в DS? Я изменил приведенный выше код, чтобы добавить таблицу в набор данных.

jdweng 20.11.2022 11:40

Другие вопросы по теме