Пытаюсь освоить Linq | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Переделываю на си шарп фоксовую форму
В ней гд-то 26 разных вызовов Оракловых процедур с refcursor, результат из Оракл получаю в datatable Все переписал, а на одной застрял. На исходной форме есть пара чеков, по значениям которых данные уже на клиенте по разному группируются. Остается то один набор полей с суммами, то другой. Всю прошлую неделю и выходные читал документацию по linq чтобы сделать аналогичное на Си. Что-то ничего не выходит. Конечно можно поступить попроще, переделать процедуру на Оракл с разными ветками, если ничего не выйдет, так и поступлю Вот пример одной из попыток DbDataAdapter da = new OracleDataAdapter(cmd1); DataTable ds = new DataTable(); //da.FillSchema(ds, SchemaType.Source, "myRefCursor"); da.Fill(ds); cmd1.ExecuteScalar(); dt = ds; // тут все нормально, данные из Оракл сидят в dt this.dataGridView1.DataSource = dt; this.label2.Text= this.lcprocname ; this.CMDExls.Visible = true; // тут пытаюсь как на Фоксе допилить результаты с сервера на клиенте, что ни пишу, // ошибка переменная ddd находится в конфликте с ее ранними определениями, которых и нет // фактически у меня нет никакого датасет, просто курсор с процедуры // пробовал и var query = from ddd и объявлял типы полей в запросе. Не это. // все поля группировки типа string суммы естественно numeric if (procname == "usrvzhfsd.usrfzatrvx2") { if (this.checkBox1.Checked == false & this.checkBox2.Checked == false) { // IEnumerable<DataRow> query = from ddd in dt.AsEnumerable() // group ddd by ddd.f1015, ddd.f1010, ddd.f10019 into pll // select new // { // f1015 = pll.f1015, // f1010 = pll.f1010, // f10019 = pll.f10019, // smr20 = Sum(pll.smr20), // smr23 = Sum(pll.smr23), // smr25 = Sum(pll.smr25), // smr29 = Sum(pll.smr29), // smrall = Sum(pll.smrall), // smr26 = Sum(pll.smr26), // smr44 = Sum(pll.smr44), //smrall1 = Sum(pll.smrall1) }; } Сидели сейчас с опытным си шником Похоже, такая простая штука тут без огромной крови не делается. Проще Оракл процедуры попилить. Исправлено 1 раз(а). Последнее : boba, 01.04.19 12:58 |
Re: Пытаюсь освоить Linq | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не надо дататэйблом пользоваться, тем более нетипизированным. Нет в его DataRow никаких f1015 или smr20 - там есть лишь нетипизированный Item[], или типизированный Field<T>() - где надо так или иначе указывать требуемое поле - именем, номером по порядку, объектом DataColumn...
Если уж с EF никак, то хотя бы dapper - по идее он позволяет прямо из DataReader получить коллекцию объектов нужного типа. Не, ну если очень охота этот ненужный DataTable, то пример в MSDN показывает как к нему запрос писать:
------------------ WBR, Igor |
Re: Пытаюсь освоить Linq | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Игорь.
С полями и типами и item тоже пробовали. Не выходит. Наибольший затык в группировке. Судя по всему при необходимости группировать несколько полей их нужно объединить в один ключ, потом группировать, потом ключ снова распилить на поля. Вчера с datareader удалось сгруппировать по одному полю, по нескольким не удалось. |
Re: Пытаюсь освоить Linq | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Владимир, я бы начал с простого - вместо нетипизированного дататэйбл где надо продираться через все эти Field<int>("f1015") перевести данные в коллекцию объектов - ну не хочешь dapper - сделай тот же длиннющий linq запрос с этими Field...
А потом - не вижу решительно никаких сложностей ------------------ WBR, Igor |
Re: Пытаюсь освоить Linq | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Спасибо, сейчас попробую.
|
Re: Пытаюсь освоить Linq | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Сейчас попробую вариант с datareader
У меня готовые 2 процедуры, одна через datatable другая datareader Обе работают на процедуры с refcursor |
© 2000-2024 Fox Club  |