0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259

Как обратиться к свойству объекта зная его порядковый номер?

05.02.2020, 19:37. Показов 4977. Ответов 33

Студворк — интернет-сервис помощи студентам
У меня есть список из объектов AbrechnungenDTO, а в dtParams есть поле с номером столбца по которому надо отсортировать... То есть если "0" то по ev.ID, если "1" то по ev.DepotID, если "2" то по ev.DepotBezeichnung и т.д.... В приведенном ниже коде я сортирую по нулевому столбцу
abrechnungenList = abrechnungenQ.OrderBy(ev => ev.ID).Skip(dtParams.Start)
.Take(dtParams.Length).ToList();

а мне нужно по столбцу, который соответствует номеру, который я получаю из dtParams.Order[0].Column???
Воот... Я запутался, спасибо всем кто откликнется...

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
public string GetDtFlatexAbrechnungen(DtParamsDTO dtParams)
        {
            IQueryable<AbrechnungenDTO> abrechnungenQ = null;
            List<AbrechnungenDTO> abrechnungenList = null;
 
            int count;
 
            using (BOBEntities bobDb = bobFac.Create())
            {
                abrechnungenQ = from ev in bobDb.Import_Flatex_Abrechnungen
                                        where ev.Handelstag >= dtParams.FilterDatumVon &&
                                              ev.Handelstag <= dtParams.FilterDatumBis
                                 select new AbrechnungenDTO
                                 {
                                     ID = ev.ID,
                                     DepotID = ev.DepotID,
                                     DepotBezeichnung = ev.DepotBezeichnung,
                                     Plattform = ev.Plattform,
                                     Bezeichnung = ev.Bezeichnung,
                                     Handelstag = ev.Handelstag,
                                     ISIN = ev.ISIN,
                                     Geschaeftsart = ev.Geschaeftsart,
                                     Stueckzahl = ev.Stueckzahl,
                                     Kurswaehrung = ev.Kurswaehrung,
                                     Kurs = ev.Kurs,
                                     Abrechnungswaehrung = ev.Abrechnungswaehrung,
                                     GebuehrenGesamt = ev.GebuehrenGesamt,
                                     GebuehrFGEB = ev.GebuehrFGEB,
                                     GebuehrCOU = ev.GebuehrCOU,
                                     GebuehrTRA = ev.GebuehrTRA,
                                     GebuehrRGSFGEB = ev.GebuehrRGSFGEB,
                                     GebuehrSDFGEB = ev.GebuehrSDFGEB,
                                     GebuehrAA = ev.GebuehrAA,
                                     GebuehrIGEB = ev.GebuehrIGEB,
                                     GebuehrTRFGEB = ev.GebuehrTRFGEB,
                                     GebuehrRGGFGEB = ev.GebuehrRGGFGEB,
                                     GebuehrSNFGEB = ev.GebuehrSNFGEB,
                                     GebuehrBON = ev.GebuehrBON,
                                     GebuehrUMLFGEB = ev.GebuehrUMLFGEB,
                                     GebuehrTRS = ev.GebuehrTRS,
                                     GebuehrTRSRGEB = ev.GebuehrTRSRGEB,
                                     GebuehrABGEB = ev.GebuehrABGEB,
                                     GebuehrVERGEB = ev.GebuehrVERGEB,
                                     GebuehrSonstige = ev.GebuehrSonstige,
                                     ValutaDatum = ev.ValutaDatum,
                                     CancelReverse = ev.CancelReverse,
                                     OrderNummer = ev.OrderNummer,
                                     Waehrungssatz = ev.Waehrungssatz,
                                     Folio = ev.Folio,
                                     Handelszeitpunkt = ev.Handelszeitpunkt,
                                     Stueckzins = ev.Stueckzins,
                                     Zinstage = ev.Zinstage,
                                     Einheitswaehrung = ev.Einheitswaehrung,
                                     WKN = ev.WKN,
                                     Waehrungsfixingzeitpunkt = ev.Waehrungsfixingzeitpunkt,
                                     GeschaeftsnummerSN = ev.GeschaeftsnummerSN
                                 };
 
                abrechnungenQ = FilterAnwenden(dtParams, abrechnungenQ);
 
                count = abrechnungenQ.Count();
                abrechnungenList = abrechnungenQ.OrderBy(ev => ev.ID).Skip(dtParams.Start)
                            .Take(dtParams.Length).ToList();
            }  
            //ResultObj erstellen
            var resultDtObj = new
            {
                draw = dtParams.Draw,
                recordsTotal = count,
                recordsFiltered = count,
                data = abrechnungenList
            };
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2020, 19:37
Ответы с готовыми решениями:

Обратиться к свойству объекта, зная имя свойства в виде строки
Доброе время суток. Я пытаюсь обратиться к свойству объекта, имея его наименование в виде строки. Можно ли как-то провернуть нечто...

Как получить символ из строки зная его порядковый номер?
AnsiString chr = &quot;ÉÖÓÊÅÍÃØÙÇÕÚÔÛÂÀÏÐÎËÄÆÝß×ÑÌÈÒÜÁÞ.,7418529630 &quot;; // 012 AnsiString m = chr.&quot;символ_номер&quot;(2); ...

Как обратиться к свойству объекта в массиве?
у меня есть массив объектов object obj = new object; product audi = new product(45000, &quot;Audi A6&quot;, &quot;Germany&quot;); ...

33
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
06.02.2020, 19:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Второй тип, это получение из БД данных в уже нужном виде. Работа по обработке данных выполняется сервером. Для этого надо или создать самому нужный SQL запрос или создать его средствами Entity Framework используя методы IQueryable. С таким типом задач я сам пока только разбираюсь и не знаю насколько предлагаемый мною подход сможет её решить.
Как же? У меня все происходит именно на сервере! с# же на стороне клиента не будет работать... Всё о чем вы мне объяснили я использую именно на сервере. С данными которые у меня в IQueryable<AbrechnungenDTO> abrechnungenQ.. Но я использую своё решение о котором выше написал, ибо оно короче и семантичнее, что со скоростью не знаю. Но вроде по содержанию кода это то же самое. И ваш код будет работать.

Добавлено через 1 минуту
Спасибо! мне ваши последние объяснения понятны. Одно остается. А зачем в принципе нужно объявлять предикат?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.02.2020, 19:12
Цитата Сообщение от Lego9 Посмотреть сообщение
А зачем в принципе нужно объявлять предикат?
Какой предикат?
Предикат нигде не используется Делегат Predicate<T>
1
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
06.02.2020, 19:19  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Предикат нигде не используется Делегат Predicate<T>
Да. зачем?

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Первая, это преобразовать полученные от БД данные (отсортировать, отфильтровать, посчитать и .т.д) в клиенте.
Я вам пишу именно за такой тип задачи.
Я всё равно не понял.... Всё же ровно наоборот.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.02.2020, 20:08
Цитата Сообщение от Lego9 Посмотреть сообщение
Да. зачем?
Предикат нужен там где требуется функция получающая один параметр и возвращающая логическое значение.
Например, фильтрация Where(Метод_Преликат)

Добавлено через 46 минут
Цитата Сообщение от Lego9 Посмотреть сообщение
Я всё равно не понял.... Всё же ровно наоборот.
C#
1
DbSet<Item> Items {get;set;}
C#
1
2
Items.Where(Предикат).ToList(); /// Фильтрация выполняется сервером
Items.ToList().Where(Предикат); /// Фильтрация выполняется клиентом
Как будет работать с моим примером - не знаю.
Надеюсь на стороне сервера.
Но это всё для БОЛЬШИХ данных.
Для обычных данных разница будет незаметная.
1
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
07.02.2020, 11:09  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Items.Where(Предикат).ToList(); /// Фильтрация выполняется сервером
Items.ToList().Where(Предикат); /// Фильтрация выполняется клиентом
Это мне более или менее понятно. Не на автомате, но когда уже сказанно то понятно.
Я просто, хотел сказать, что у меня то все ровно наоборот, всё происходит на стороне сервера, и вроде как из моего кода это видно.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.02.2020, 13:15
Цитата Сообщение от Lego9 Посмотреть сообщение
Я просто, хотел сказать, что у меня то все ровно наоборот, всё происходит на стороне сервера, и вроде как из моего кода это видно.
Да. Я понял.
Я пишу за то, что точно не знаю как будет работать МОЙ вариант.
Для функций получающих значения свойств (находящихся в массиве Getters) нужно получить ЭКЗЕМПЛЯР AbrechnungenDTO.
Сможет ли сервер создать такой экземпляр?
Мне кажется сомнительным. Скорее всего для создания экземпляра потребуется передать данные клиенту. И весь код будет выполняться клиентом. Для небольшого количества записей (десятки-сотни тысяч) это не очень принципиально.
А вот для большего количество может оказаться существенным.

Не очень принципиально, поскольку у вас это необходимо для сортировки. И, следовательно, в любом случае ВСЕ записи будут переданы клиенту. А скорость сортировки, что сервером, что клиентом существенно не отличается и зависит от характеристик конкретных машин.

Для фильтрации же уже совсем по иному, так как фильтрация сервером, позволяет значительно уменьшить количество передаваемых данных. А это обычно самое узкое место в скорости работы.
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
07.02.2020, 18:02  [ТС]
У меня фильтрация по дате осуществляется перед сортировкой, а потом сервервозвращает по 33 строки всего же в таблице 5,5 млн строк. Поэтому даже на сервере все происходит не быстро.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.02.2020, 18:16
Цитата Сообщение от Lego9 Посмотреть сообщение
а потом сервервозвращает по 33 строки
Если там всего 33 строки, то разницы где это будет выполняться значения не имеет.
Важно сделать быструю фильтрацию этих 33 строк из 5.5 млн.
Правильно продумайте связи в таблицах БД.
Если фильтрация типовая, то должно быстро работать.
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
10.02.2020, 11:04  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если там всего 33 строки, то разницы где это будет выполняться значения не имеет.
Важно сделать быструю фильтрацию этих 33 строк из 5.5 млн.
Правильно продумайте связи в таблицах БД.
Если фильтрация типовая, то должно быстро работать.
Я честно говоря тут не совсем понимаю.. Я пытался сначала сделать фильрацию на стороне клиента, посредством Angular-DataTable. Это было бы красиво... Но у меня не получилось ибо после фильтрации у клиента, прога всё равно обращается к серверу, и если там нет соответствующих условий в создании таблицы, то таблица возвращается в том виде как я её создал на сервере... Так как-то.
Я например не нужные колонки скрываю с помощью "DTColumnDefBuilder.newColumnDef(1).with Option('visible', true/false),", так все равно потом контроллер обрабатывает, и чувствуется маленькая задержка... Я пока не нашел как это обойти.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
10.02.2020, 11:43
Цитата Сообщение от Lego9 Посмотреть сообщение
Я честно говоря тут не совсем понимаю..
Я по-моему вsit писал, что сам только осваиваю БД.
И в таких нюансах только пытаюсь разобраться.
Поэтому экспертного мнения от меня не ждите.

Если исходить из условий вашей задачи: милиооный записей из которых нужно несколько десятков.
То однозначно устраивать фильтр на стороне клиента бессмысленно.
Передача этих миллионов от сервера к клиенты убьёт приложение.
На фильтрацию нужен SQL запрос в БД.

Сортировка же нескольких десятков уже отфильтрованных данных очень быстрая как в клиенте, так и на сервере.
Поэтому делать надо как проще.

Но есть нюанс. Такое возможно, только если сортировка делается после фильтрации.
В реале иногда бывает необходимость в фильтрации после сортировки. В таком случае сортировка тоже должна быть в SQL запросе и делаться на сервере.

В целом общего решения на вашу задачу нет.
Нужны детали реализации как и БД, так и клиента, и их взаимодействия.

Вы как работаете с БД? EF, адаптер или ещё какой-то вариант?
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
11.02.2020, 11:25  [ТС]
Да, так я об этом же и пишу, я все манипуляции с данными фильтр, сортировка, все делаю на стороне сервера. Я бы хотел сделать сортировку уже отфильтрованных данных на стороне клиента но не сумел. И вообще я в данном случае не оч понимаю, что значит на стороне клиента, ибо данные в клиент отправляются порциями постранично. В этом весь смысл. Иначе можно было бы их общим списком в приложение вернуть и уже в клиенте в таблицу засунуть... Порциями же их бессмысленно сортировать... В общем остаюсь с такимрешением. Спасибо.
Вот со скрытием столбцов, я на уровне ощущений чувствую, что что-то у меня не правильно. Я их скрываю средствами DataTable, а потом тем неменее снова пробегаюсь по контроллеру. Не так это как то должно быть...
0
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259
11.02.2020, 12:45  [ТС]
Элд Хасп, может быть Вы мне посоветуете? Я при переходе со страницы на страницу в приложении запоминаю состояние всех своих контроллеров, что бы при возвращении все мои фильтры были в том же состоянии... Делаю это с помощью localStorage, Все отлично работает... Единственное что я пока не могу сообразить как запомнит контроллер который относится к DataTable? Состояние кнопки с номером страницы? Ибо это сервис DataTable,
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
11.02.2020, 15:05
Цитата Сообщение от Lego9 Посмотреть сообщение
Делаю это с помощью localStorage, Все отлично работает...
Это у вас WinForms или WPF ?
Если WPF, то "страницы" это, что Page или UserControl?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
11.02.2020, 18:40
Lego9, кнопка "Обратить внимание администрации".
Нажимаете на неё и отправляете сообщение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2020, 18:40
Помогаю со студенческими работами здесь

Как обратиться к свойству объекта WPF из метода static класса?
Как обратиться к свойству объекта WPF из метода static класса? Есть окно с меню, надписью и кнопкой &lt;Window...

Обратиться к свойству дочернего объекта
Есть глобальная функция, которая вызывается в нескольких обработчиках linkLabel. Как обратиться к свойству linkLabelN.Text, вызвавшей эту...

Как обратиться к контролу, зная его имя?
У меня в строке хранится имя контрола. Подскажите пожалуйста как можно обращаться к свойствам и методам этого компонента в данном случае.

Обратиться к свойству объекта при помощи FindComponent
Подскажите, если не трудно. В проекте имеется несколько форм: FormSovet1, FormSovet2 и т. д. На каждой есть LabelSov. Нужно получить...

Tkinter - теперь как обратиться к виджету зная его имя?
я немного чайник ... сам вопрос: если я хочу обратиться к виджету, зная его имя, вроди бы как надо использовать nametowidget(name), но я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru