|
|
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Ситуация: Есть ДатаСет, в нем 2 таблицы Мастер-Детал. Ну, например, Клиенты-Заказы. Нужно выбрать из Клиентов тех, у которых нет ни одного заказа. И делать это нужно уже тогда, когда таблицы загружены в ДатаСет, а не находятся еще на сервере. Другими словами, нужно сделать что-то типа SQL-запроса NOT IN. Каждый раз обращаться к серверу с таким запросом - грустно. Тогда нужно сначала делать сохранение сделанных изменений в базе, а уже потом посылать такой запрос к ней. А это все время. Да и морока. Может, подскажет кто? Может есть какая-нить техника проведения подобных операций. Был бы очень благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 10:17 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
сматри RowFilter ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 11:07 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Sv219сматри RowFilter Вы не поняли. RowFilter можно отсортировать строки в уже сделанном запросе. Я же не могу сделать сам запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:03 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
А можно сделать без запросов. Допустим имеем датасет m_DS с двумя таблицами "Client", "Order". Т.к. таблицы Мастер-детал, предположим у датасета есть DataRelation "ClientOrder", ParentTable - "Client" с ParentColumns "Id", ChildTable - "Orders" c ChildColumns "ClientId". тогда выборку получим примерно так: foreach( DataRow dr in m_DS.Tables["Client"].Rows) { if( dr.GetChildRows("ClientOrder").Length == 0 ) { listBox1.Items.Add(dr["ID"].ToString() + " \t" + dr["Name"].ToString()); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:11 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Спасибо. Это вариант. Жаль, что в родительской таблице строк очень много. Но все равно - спасибо. Мне в голову это не пришло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:30 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Ахтунг! Если строк очень много, ДатаСет может лопнуть. У меня лопался когда за гигабайт оперативки вылезал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 16:46 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Sergey KartashevАхтунг! Если строк очень много, ДатаСет может лопнуть. У меня лопался когда за гигабайт оперативки вылезал. Ну-ка, ну-ка, расскажите, пожалуйста подробнее. Как это лопнуть? Что при этом происходит? И как Вы выходили из этой ситуации. Очень интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2006, 17:47 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Это значит что он вылетает с Unhadnled Exception вместе со всей программой, собственно на методе .Fill ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 10:50 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
А выходил я из этой ситуации, разделив очень большую табличку вьюхами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 10:52 |
|
||
|
Как бы сделать SELECT к DataTable
|
|||
|---|---|---|---|
|
#18+
Ничего не надо придумывать. у DataTable есть функция Select он действует почти точно так же как и в SQL Она возвращает DataRows Выглядит это так. ds.tables(0).Select("field=0") Добавь к основной таблице вычисляемое поле в котором будет считаться количество заказов у клиента, что то вроде: ds.tables(0).columns.add("OrderCount", type.GetType("System.Int32"),"Count(child(имя_связи).OrderID)") А потом примени к этой таблице функцию Select, получишь то, что тебе надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2006, 13:41 |
|
||
|
|

start [/forum/topic.php?fid=17&fpage=112&tid=1353479]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 330ms |

| 0 / 0 |
