Вы захотите 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 .
В конце вывода все авторитетные серверы, включая серверы резервного копирования для данного домена, перечислены.
Я бы предложил эту альтернативу тому, что опубликовали все остальные.
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. Я использовал это с большим успехом; это спасатель для высокопроизводительного связывания данных и операций с динамическими свойствами бизнес-объектов.
Да, я не думаю, что есть другой способ, кроме Reflection.
Пример:
query = query.OrderBy(x => x.GetType().GetProperty("ProductId").GetValue(x, null));
query = query.OrderBy(x => x.GetType().GetProperty("ProductId").GetValue(x, null));
Пытаюсь вспомнить точный синтаксис из головы, но я думаю, что это правильно.
Отражение - вот ответ!
typeof(YourType).GetProperty("ProductId").GetValue(theInstance);
Есть много вещей, которые вы можете сделать для кэширования отраженной информации о PropertyInfo, проверки на наличие неправильных строк, написания функции сравнения запросов и т. Д., Но по сути это то, что вы делаете.
Вы можете использовать динамический Linq - ознакомьтесь с этим блогом.
Также ознакомьтесь с этим сообщением StackOverFlow ...