Проверьте свойства объекта во время выполнения из словаря условий в c# - PullRequest
0 голосов
/ 02 апреля 2020

В моем заявлении указано следующее требование.

Имя моей организации - Платеж. При совершении платежа у меня следующие условия. Исходя из этих условий я должен сказать, что это оплата или восстановление или около sh. Я определил все эти условия в словаре.

 Dictionary<string, string> paymentTypes = new Dictionary<string, string>();
 paymentTypes.Add("Cash", "Payment.Type = 'C' and Recovery != ''");
 paymentTypes.Add("Recovery", "Payment.Recovery = ''");
 paymentTypes.Add("Payment", "Payment.Recovery != ''");

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

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

Я не могу преобразовать мои выражения в динамическое c выражение. Все эти выражения будут поступать из БД в виде строки. Как мне определить выражение, когда моя сущность является обобщенной c? это выражения, которые я сделал.

Expression<Func<Payment, bool>> cashFilter = payment => payment.Recovery == "" && payment.Type != "V" && payment.Type != "S"; 

            Expression<Func<Payment, bool>> paymentFilter = payment => payment.Recovery == "";

            Expression<Func<Payment, bool>> recoveryFilter = payment => payment.Recovery != ""; 

1 Ответ

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

Я предлагаю использовать лямбду вместо строк.

var paymentTypes = new Dictionary<string, Func<Payment,bool>>
{
    { "Cash", payment => payment.Type == 'C' && payment.Recovery != '' },
    { "Recovery", payment => payment.Recovery == '' },
    { "Payment", payment => payment.Type != 'C' && payment.Recovery != '' }
};

Тогда вы можете просто оценить это так:

var paymentType = paymentTypes.Single( entry => entry.Value(payment) ).Key;
...