Передайте класс в качестве аргумента вместо объекта в c# - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь создать c# sql построитель запросов.

Итак, я построил некоторый метод, который можно использовать следующим образом.

Query.Select("Order.OrderId").From("Order")

У меня уже есть классы (модели), сгенерированные из структуры сущностей.

Так есть ли способ, я могу использовать их имя класса и / или их свойства для передачи здесь в качестве аргумента и получить их имя в виде строки?

например (обратите внимание, двойных кавычек нет)

Query.Select(Order.OrderId).From(Order)

пока то, что я использую на данный момент, ниже.

Query.Select($"{nameof(Order)}.{nameof(OrderId)}").From(nameof(Order))

, который, как вы можете видеть, слишком уродлив и разрушает всю цель сделать sql запрос читабельным.

Причина Я не использую запросы EF, потому что он становится слишком сложным для сложных запросов. https://en.m.wikipedia.org/wiki/Object-relational_impedance_mismatch

1 Ответ

0 голосов
/ 27 апреля 2020

Пример использования имени класса или / и их свойств для передачи в качестве аргумента и получения их имени в виде строки.

private static string abc<T>(string propertyName)
{
    if(String.IsNullOrEmpty(propertyName))
    {
        return typeof(T).Name;
    }
    else
    {
        PropertyInfo columnProperty = typeof(T).GetProperty(propertyName);
        return typeof(T).Name + "." + columnProperty.Name;
    }
}


//An usage
Query.Select(abc<Order>("OrderId")).From(abc<Order>(""));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...