Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос к двум таблицам в DataSet / 5 сообщений из 5, страница 1 из 1
05.04.2010, 15:35
    #36561389
Azeke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к двум таблицам в DataSet
Привет.
Сделал загрузку данных из удаленной базы в обьект DataSet:

Код: plaintext
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.
        private void button1_Click(object sender, EventArgs e)
        {
            string sdate = String.Format("{0:dd/MM/yyyy}", dateTimePicker1.Value.AddDays(-4));
            string ndate = String.Format("{0:dd/MM/yyyy}", dateTimePicker1.Value);
            string sql_nat = "select vags.mm_d, vags.mm_id, vags.sec_mod, vags.sec_num" +
                                " from (select distinct m.mm_d,m.mm_dor, m.mm_id, ss.sec_mod, ss.sec_num" +
                                   " from mmdoc.mmmm m inner join mmdoc.mmmslog log on" +
                                   " m.mm_d=log.mm_d and" +
                                   " m.mm_dor=log.mm_dor" +
                                   " left join mmdoc.mmmss ss on" +
                                   " m.mm_d=ss.mm_d and" +
                                   " m.mm_dor=ss.mm_dor" +
                                   " where pr_mm_proc='1' and pr_mm_d='0' and pr_mm_dd='0' and m.mm_d='" + ndate + "') vags" +
                                " where vags.mm_id not in (select mm_id from ASOUP.mmmv_tr)" +
                                " group by vags.mm_d, vags.mm_id, vags.sec_mod, vags.sec_num;";

            string sql_s200 = "select STF, PNS, STN, OPER_ID_ST, OPER_TS, OPER, NUM, SEC_MOD, SEC_NUM, SEC_CODE, URVS" +
                              " from ASOUP.POEZD" +
                              " where SEC_MOD is not null and SEC_NUM is not null and" +
                              " OPER_TS between timestamp('" + sdate + "', '00.00.00') and timestamp('" + ndate + "', '00.00.00')" +
                              " order by STF,PNS,STN,OPER_TS,OPER;";

            string connectionString = "Provider=IBMDADB2;Database=dd;Hostname=10.10.0.85;Protocol=TCPIP; Port=50000;Uid=Administrator;Pwd=123;";
            OleDbConnection conn = new OleDbConnection(connectionString);
            conn.Open();           
            OleDbDataAdapter da = new OleDbDataAdapter(sql_nat, conn);
            OleDbDataAdapter da1 = new OleDbDataAdapter(sql_s200, conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "mm");
            da1.Fill(ds, "s200");
          
           // необходимый запрос LINQ описание ниже.

            dataGridView1.DataSource = ; //результат запроса LINQ
            conn.Close();
        }
Теперь мне необходимо сравнить обе таблицы и вывести в dataGridView1 все данные из таблицы mm и только те данные из s200 которые совпадают sec_mod, sec_num. (Как я понимаю это можно сделать LINQ. Я с ним пока не сталкивался почитал в инете не совсем понял)

т.е. SQL запрос того что мне надо:
Код: plaintext
1.
2.
3.
4.
5.
select mm.mm_d, mm.mm_id, mm.sec_mod, mm.sec_num, s200.STF, s200.PNS, s200.STN, s200.OPER_ID_ST, s200.OPER_TS, s200.OPER, NUM, s200.SEC_MOD, s200.SEC_NUM
from mm left join s200 on
mm.sec_mod=s200.SEC_MOD and
mm.sec_num=s200.SEC_NUM;

...
Рейтинг: 0 / 0
06.04.2010, 09:13
    #36562413
Azeke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к двум таблицам в DataSet
Пробую так:

Код: plaintext
1.
2.
3.
4.
5.
IEnumerable<string> query =
                from c in mm_tab
                join p in s200_tab
                on new { c.sec_mod, c.sec_num } equals new { p.sec_mod, p.sec_num }
                select new { c.mm_id, c.sec_mod, c.sec_num, p.STF, p.PNS, p.STN };
но пишет ошибку:

Error 3 Could not find an implementation of the query pattern for source type 'System.Data.DataTable'. 'Join' not found.
...
Рейтинг: 0 / 0
07.04.2010, 07:49
    #36564776
Azeke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к двум таблицам в DataSet
Переделал вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
var query =
                from mm_tab in mm_tabs.AsEnumerable()
                join s200_tab in s200_tabs.AsEnumerable()
                on mm_tab.Field<string>("sec_mod") equals s200_tab.Field<string>("sec_mod")
                into mm_s200
                from mm in mm_s200.DefaultIfEmpty()
                select new {mm_id=mm_tab.Field<string>("mm_id"), STF=(mm.Field<string>("STF")==null ? String.Empty : mm.Field<string>("STF"))};

вроде разобрался (проверка синтаксиса ошибку не дает)

теперь хочу вывести результат в компонент
dataGridView1

Пишу так:
Код: plaintext
1.
2.
DataTable result = query.CopyToDataTable();
            dataGridView1.DataSource = result;
Но ругается на query.CopyToDataTable()
Error 3 The type 'AnonymousType#1' cannot be used as type parameter 'T' in the generic type or method 'System.Data.DataTableExtensions.CopyToDataTable<T>(System.Collections.Generic.IEnumerable<T>)'. There is no implicit reference conversion from 'AnonymousType#1' to 'System.Data.DataRow'.

Прочитал в инете статью про это http://msdn.microsoft.com/ru-ru/library/bb669096.aspx

Это про мой случай. Только я там не разобрался мне нужно в программе новый класс создовать для обработки и т.д. Это долгая история. Вопрос к вам гуру С# подскажите как можно связать dataGridView1 с результатом запроса?
...
Рейтинг: 0 / 0
07.04.2010, 10:14
    #36564968
Azeke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к двум таблицам в DataSet
Никто с этим раньше не сталкиваля.
Такое ощушение, что я один на этом форуме.
Второй день прошу помощи и тишина.
...
Рейтинг: 0 / 0
07.04.2010, 12:44
    #36565555
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос к двум таблицам в DataSet
Он же Вам пишет в чем беда...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Запрос к двум таблицам в DataSet / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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