Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2021, 08:51   #1
Alena16
Пользователь
 
Регистрация: 12.11.2021
Сообщений: 16
Восклицание Неверный запрос linq на объединение таблиц

Здравствуйте, задача такая, есть 2 таблицы excel, нужно их вывести в два листбокса, а в 3 по кнопке объединить, собственно, объединить их так, чтобы в первой колонке был id, название товара, цвет, размер и поставщик. По сути, нужно добавить колонку id их 2 таблицы в 1-ую таблицу, но проблема в том, что я что-то намудрила и оно соединяет не по тем id. Помогите, если не сложно.
Screenshot_2.jpg
Код:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Excel = Microsoft.Office.Interop.Excel;

namespace laba_3.Pages
{
    /// <summary>
    /// Логика взаимодействия для StartWindowPage.xaml
    /// </summary>
    public partial class StartWindowPage : Page
    {
        public List<Data1> objects = new List<Data1>();
        public List<Data1> objects2 = new List<Data1>();
        public List<Data3> objects3 = new List<Data3>();
        public class DataD
        {
            public string nameOfMaterial { get; set; }
            public string color { get; set; }
            public string size { get; set; }
            public string supplier { get; set; }
            public int id { get; set; }
        }
        public class Data1
        {
            public string nameOfMaterial { get; set; }
            public string color { get; set; }
            public string size { get; set; }
            public string supplier { get; set; }

            public int id { get; set; }
        }
        public class Data2
        {
            public string nameOfMaterial { get; set; }
            public int id { get; set; }
        }
        public class Data3
        {
            public string nameOfMaterial { get; set; }
            public string color { get; set; }
            public string size { get; set; }
            public string supplier { get; set; }
            public int id { get; set; }
        }
        public StartWindowPage()
        {
            InitializeComponent();
        }

        private void ExitButtonClick(object sender, RoutedEventArgs e)
        {
            Environment.Exit(0);
        }

        private void JoinListButtonClick(object sender, RoutedEventArgs e)
        {
            //ERR
            var result = from pl in objects
                         join t in objects2 on pl.nameOfMaterial equals t.nameOfMaterial
                         select new { nameOfMaterial = pl.nameOfMaterial, id = t.id, color = pl.color, size = pl.size, supplier = pl.supplier };
          

            //ERR
            var result2 = objects.Join(objects2, // второй набор
             p => p.nameOfMaterial, // свойство-селектор объекта из первого набора
             t => t.nameOfMaterial, // свойство-селектор объекта из второго набора
            (p, t) => new { nameOfMaterial = p.nameOfMaterial, id = t.id, color = p.color, size = p.size, supplier = p.supplier });


            foreach (var item in result)
            {
                ListBox33.Items.Add(item.nameOfMaterial.ToString());
                ListBox33.Items.Add(item.id.ToString());
                ListBox33.Items.Add(item.color.ToString());
                ListBox33.Items.Add(item.size.ToString());
                ListBox33.Items.Add(item.supplier.ToString());
            }
        }

        private void ViewListsButtonClick(object sender, RoutedEventArgs e)
        {
            Excel.Application excelApp = new Excel.Application();
            excelApp.Visible = false; // Отвечает за то, будет ли видимо приложен
            string path = @"E:\laba_3\laba_3\excelTables\book1.xlsx";

            excelApp.Workbooks.Open(path);


            int row = 2;
            ArrayList maping = new ArrayList();
            Excel.Worksheet currentSheet = (Excel.Worksheet)excelApp.Workbooks[1].Worksheets[1];
            while (currentSheet.get_Range("A" + row).Value2 != null)
            {
                for (char column = 'A'; column < 'E'; column++)
                {
                    Excel.Range cell = currentSheet.get_Range(column.ToString() + row.ToString());
                    maping.Add(cell != null ? cell.Value2.ToString() : "");
                }
                row++;
            }
            excelApp.Quit();


            Excel.Application excelApp2 = new Excel.Application();
            excelApp2.Visible = false; // Отвечает за то, будет ли видимо приложен
            string path22 = @"E:\laba_3\laba_3\excelTables\book2.xlsx";

            excelApp2.Workbooks.Open(path22);

            int row2 = 2;
            ArrayList maping2 = new ArrayList();
            Excel.Worksheet currentSheet2 = (Excel.Worksheet)excelApp2.Workbooks[1].Worksheets[1];
            while (currentSheet2.get_Range("A" + row2).Value2 != null)
            {
                for (char column = 'A'; column < 'C'; column++)
                {
                    Excel.Range cell = currentSheet2.get_Range(column.ToString() + row2.ToString());
                    maping2.Add(cell != null ? cell.Value2.ToString() : "");
                }
                row2++;
            }

            excelApp2.Quit();

            for (int counter = 0; counter < maping.Count; counter += 4)
            {
                objects.Add(new Data1
                {
                    nameOfMaterial = maping[counter].ToString(),
                    color = maping[counter + 1].ToString(),
                    size = maping[counter + 2].ToString(),
                    supplier = maping[counter + 3].ToString()
                });
            }

            for (int counter = 0; counter < maping2.Count; counter += 2)
            {
                objects2.Add(new Data1
                {
                    nameOfMaterial = maping2[counter].ToString(),
                    id = Convert.ToInt32(maping2[counter + 1])
                });
            }

            foreach (var item in objects)
            {
                ListBox3.Items.Add(item.nameOfMaterial.ToString());
                ListBox3.Items.Add(item.color.ToString());
                ListBox3.Items.Add(item.size.ToString());
                ListBox3.Items.Add(item.supplier.ToString());
            }

            foreach (var item in objects2)
            {
                ListBox2.Items.Add(item.nameOfMaterial.ToString());
                ListBox2.Items.Add(item.id.ToString());
            }
        }
    }
}
Alena16 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
asp.net LINQ SQL выборка с двох таблиц ogamilait SQL, базы данных 11 10.02.2015 20:27
Объединение больших таблиц - как ускорить запрос? supermike SQL, базы данных 13 30.11.2014 20:51
Неверный веб-запрос InfoR Microsoft Office Excel 5 03.06.2013 14:48
LINQ C# составить запрос Antrikot C# (си шарп) 1 18.02.2012 11:34
Неверный запрос Gromsky SQL, базы данных 9 21.08.2009 18:25