powered by simpleCommunicator - 2.0.33     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Некорректное отображение linq запроса к связанным таблицам dataset, datatable c#
3 сообщений из 3, страница 1 из 1
Некорректное отображение linq запроса к связанным таблицам dataset, datatable c#
    #40115277
AlenaLis16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Есть две внутренних БД без использования сервера. Созданы и наполнены через dataset и datatable. Задача: с консоли набрать фамилию автора (можно по первым 3 буквам без учета регистра) и вывести его произведения и их объем. Так вот, мой запрос выводит все произведения, а а авторах один и тот же автор. Помогите, пожалуйста



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ex_27
{
    class Program
    {
        static void Main(string[] args)
        {
            //#27

            DataSet authors = new DataSet("authors");



            DataTable auth = new DataTable("auth");
            // добавляем таблицу в dataset
            authors.Tables.Add(auth);
            // создаем столбцы для таблицы authors
            DataColumn idColumn = new DataColumn("Id", Type.GetType("System.Int32"));
            idColumn.Unique = true; // столбец будет иметь уникальное значение
            idColumn.AllowDBNull = false; // не может принимать null
            idColumn.AutoIncrement = true; // будет автоинкрементироваться
            idColumn.AutoIncrementSeed = 1; // начальное значение
            idColumn.AutoIncrementStep = 1; // приращении при добавлении новой строки

            DataColumn nameColumn = new DataColumn("Name", Type.GetType("System.String"));

            auth.Columns.Add(idColumn); 
            auth.Columns.Add(nameColumn);

            // определяем первичный ключ таблицы books
            auth.PrimaryKey = new DataColumn[] { auth.Columns["Id"] };
            DataRow row = auth.NewRow();
            row.ItemArray = new object[] { null, "Пушкин А.С" };
            auth.Rows.Add(row); // добавляем первую строку
            auth.Rows.Add(new object[] { null, "Гоголь Н.В" }); // добавляем вторую строку
            auth.Rows.Add(new object[] { null, "Хемингуэй Э." }); // добавляем вторую строку
            Console.Write("\tId \tАвтор"); Console.WriteLine();
            foreach (DataRow r in auth.Rows)
            {
                foreach (var cell in r.ItemArray) Console.Write("\t{0}", cell); Console.WriteLine();
            }



            DataTable books = new DataTable("books");
            authors.Tables.Add(books);
            DataColumn IdAuth = new DataColumn("Id", Type.GetType("System.Int32"));
            

            
            DataColumn countStr = new DataColumn("countStr", Type.GetType("System.Int32"));
            DataColumn nameColumnBook = new DataColumn("Name", Type.GetType("System.String"));

            books.Columns.Add(IdAuth); 
            books.Columns.Add(countStr);
            books.Columns.Add(nameColumnBook);


            DataRow row1 = books.NewRow();

            row1.ItemArray = new object[] { 1, 202, "Капитанская дочка"};
            books.Rows.Add(row1); // добавляем первую строку
            books.Rows.Add(new object[] { 1, 68, "Евгений Онегин"}); // добавляем вторую строку
            books.Rows.Add(new object[] { 2, 212, "Мертвые души"}); // добавляем вторую строку
            books.Rows.Add(new object[] { 2, 144, "Вечера на хуторе близ Диканьки"}); // добавляем вторую строку
            books.Rows.Add(new object[] { 3, 178, "Прощай оружие" }); // добавляем вторую строку
            books.Rows.Add(new object[] { 3, 89, "Старик и море" }); // добавляем вторую строку
            Console.Write("\n\tId \tОбъём \tПроизведение"); Console.WriteLine();
            foreach (DataRow r in books.Rows)
            {
                foreach (var cell in r.ItemArray) Console.Write("\t{0}", cell); Console.WriteLine();
            }

            ForeignKeyConstraint foreignKey = new ForeignKeyConstraint(auth.Columns["Id"], books.Columns["Id"])
            {
                ConstraintName = "authBooksKey",
                DeleteRule = Rule.SetNull,
                UpdateRule = Rule.Cascade
            };
            // добавляем внешний ключ в dataset
            authors.Tables["books"].Constraints.Add(foreignKey);
            // применяем внешний ключ
            authors.EnforceConstraints = true;
            authors.Relations.Add("authBooks", auth.Columns["Id"], books.Columns["Id"]);

            /*            DataRow[] rows = row.GetChildRows(authors.Relations["authBooks"]);
                        Console.Write("\n\tId_AUTH \tПроизведение \tОбъём"); Console.WriteLine();
                        foreach (DataRow r in rows)
                        {
                            Console.WriteLine("{0} \t{1} \t{2}", r["Id"], r["Name"], r["countStr"]);
                        }*/


            Console.WriteLine("Введите фамилию автора: ");
            string surname = Console.ReadLine();

            /*var manWithOffice = context.Peoples.Join(
                context.OfficePeoples, e => e.Id, e => e.Peoples.Id, 
                (man, hisoffice) => new { people = man, city = hisoffice.Offices.City });*/

            /*var q = from DataRow myRow in authors.Tables["auth"].Rows
                    from DataRow myRow2 in authors.Tables["books"].Rows
                    where myRow["Name"].ToString().ToUpper().StartsWith("Х")
                    select new { book = myRow2["Name"], count = myRow2["countStr"], aut = myRow["Name"] };*/

            var query = from au in authors.Tables["auth"].AsEnumerable()
                        from bo in authors.Tables["books"].AsEnumerable()
                        where au["Name"].ToString().ToUpper().Substring(0,3) == surname.ToUpper().Substring(0, 3)
                        select new { book = bo["Name"], count = bo["countStr"], aut = au["Name"] };

            Console.WriteLine();
            foreach (var t in query)
                Console.WriteLine("\t{0}\t {1}\t {2}\t", t.count, t.aut, t.book);




            Console.ReadKey();
        }
    }
}
...
Рейтинг: 0 / 0
Некорректное отображение linq запроса к связанным таблицам dataset, datatable c#
    #40115279
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlenaLis16
Код: c#
1.
2.
3.
4.
            var query = from au in authors.Tables["auth"].AsEnumerable()
                        from bo in authors.Tables["books"].AsEnumerable()
                        where au["Name"].ToString().ToUpper().Substring(0,3) == surname.ToUpper().Substring(0, 3)
                        select new { book = bo["Name"], count = bo["countStr"], aut = au["Name"] };

тут явно не хватает join
то есть выбираются все авторы и все книги
автор фильтруется по буквам и ему сопоставляются все имеющиеся книги
...
Рейтинг: 0 / 0
Некорректное отображение linq запроса к связанным таблицам dataset, datatable c#
    #40115300
AlenaLis16
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Вам, Вы мне как всегда глаза открыли. Пробовала через join, но, видимо не то связывала и не получалось, в итоге отбросила этот вариант, а он и был правильный. Спасибо ещё раз
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Некорректное отображение linq запроса к связанным таблицам dataset, datatable c#
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]