C# - кодируйте для упорядочивания свойством с помощью имени свойства в качестве строки

Вы захотите SOA (Запустите полномочий), запись для данного доменного имени, и это - то, как Вы выполняете его с помощью универсально доступный инструмент nslookup командной строки:

command line> nslookup
> set querytype=soa
> stackoverflow.com
Server:         217.30.180.230
Address:        217.30.180.230#53

Non-authoritative answer:
stackoverflow.com
        origin = ns51.domaincontrol.com # ("primary name server" on Windows)
        mail addr = dns.jomax.net       # ("responsible mail addr" on Windows)
        serial = 2008041300
        refresh = 28800
        retry = 7200
        expire = 604800
        minimum = 86400
Authoritative answers can be found from:
stackoverflow.com       nameserver = ns52.domaincontrol.com.
stackoverflow.com       nameserver = ns51.domaincontrol.com.

источник (или основной сервер имен в Windows) строка говорит Вам, что ns51.domaincontrol является основным сервером имен для stackoverflow.com .

В конце вывода все авторитетные серверы, включая серверы резервного копирования для данного домена, перечислены.

72
задан devi 15 January 2018 в 12:20
поделиться

5 ответов

Я бы предложил эту альтернативу тому, что опубликовали все остальные.

System.Reflection.PropertyInfo prop = typeof(YourType).GetProperty("PropertyName");

query = query.OrderBy(x => prop.GetValue(x, null));

Это позволяет избежать повторных вызовов API отражения для получения свойства. Теперь единственный повторный вызов - получение значения.

Однако

я бы рекомендовал использовать вместо него PropertyDescriptor , так как это позволит назначить пользовательский TypeDescriptor вашим type, что позволяет использовать облегченные операции для получения свойств и значений. В отсутствие настраиваемого дескриптора он все равно вернется к отражению.

PropertyDescriptor prop = TypeDescriptor.GetProperties(typeof(YourType)).Find("PropertyName");

query = query.OrderBy(x => prop.GetValue(x));

Что касается ускорения, ознакомьтесь с проектом Marc Gravel HyperDescriptor на CodeProject. Я использовал это с большим успехом; это спасатель для высокопроизводительного связывания данных и операций с динамическими свойствами бизнес-объектов.

105
ответ дан 24 November 2019 в 12:29
поделиться

Да, я не думаю, что есть другой способ, кроме Reflection.

Пример:

query = query.OrderBy(x => x.GetType().GetProperty("ProductId").GetValue(x, null));
12
ответ дан 24 November 2019 в 12:29
поделиться
query = query.OrderBy(x => x.GetType().GetProperty("ProductId").GetValue(x, null));

Пытаюсь вспомнить точный синтаксис из головы, но я думаю, что это правильно.

5
ответ дан 24 November 2019 в 12:29
поделиться

Отражение - вот ответ!

typeof(YourType).GetProperty("ProductId").GetValue(theInstance);

Есть много вещей, которые вы можете сделать для кэширования отраженной информации о PropertyInfo, проверки на наличие неправильных строк, написания функции сравнения запросов и т. Д., Но по сути это то, что вы делаете.

2
ответ дан 24 November 2019 в 12:29
поделиться

Вы можете использовать динамический Linq - ознакомьтесь с этим блогом.

Также ознакомьтесь с этим сообщением StackOverFlow ...

2
ответ дан 24 November 2019 в 12:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: