Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 20.01.2014
Сообщений: 259

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

05.02.2020, 19:37. Показов 4876. Ответов 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
11.02.2020, 15:05
Цитата Сообщение от Lego9 Посмотреть сообщение
Делаю это с помощью localStorage, Все отлично работает...
Это у вас WinForms или WPF ?
Если WPF, то "страницы" это, что Page или UserControl?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16125 / 11249 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 09.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru