.NET 4.x Деревья выражений - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите пожалуйста разобраться с деревьями выражений. Хочу вызвать метод в который передаю List организаций, и три лямбда выражения.
PrintDifference(Companies, c1 => c1.CompanyID == 42, c2 => c2.CompanyID == 44, c=>c.FullName);
Это тело метода:
 private string PrintDifference<T, TExtraProp1, TExtraProp2, TExtraProp3, TT >(IEnumerable<T> sourceInstance, 
            Expression<Func<T, TExtraProp1>> excludeExpression1,
            Expression<Func<T, TExtraProp2>> excludeExpression2,
            Expression<Func<TT, TExtraProp3>> excludeExpression3)
{
 
//сначало пытаюсь достать одну организацию
var company1 = sourceInstance.First(excludeExpression1);
//затем пытаюсь достать другую организацию
var company2 = sourceInstance.First(excludeExpression2);
 
//потом пытаюсь достать значение свойства "FullName" одной организации
var compareValue1 = company1.Select(excludeExpression3);
//потом пытаюсь достать значение свойства "FullName" другой организации
var compareValue2 = company2.Select(excludeExpression3);
 
if (compareValue1 == compareValue2) return "yes";

return "";
}
В интернете пыталась найти примеры, чтобы найти то, чтобы работало так как я бы задумала, но все равно компилятор, как не компилировался, так и не компилируется...

Решение задачи: «.NET 4.x Деревья выражений»

textual
Листинг программы
        private string PrintDifference<T, TExtraProp3>(IEnumerable<T> sourceInstance,
            Expression<Func<T, bool>> excludeExpression1,
            Expression<Func<T, bool>> excludeExpression2,
            Expression<Func<T, TExtraProp3>> excludeExpression3)  
        {
 
            //сначало пытаюсь достать одну организацию
            var company1 = sourceInstance.AsQueryable().First(excludeExpression1);
            //затем пытаюсь достать другую организацию
            var company2 = sourceInstance.AsQueryable().First(excludeExpression2);
 
            //потом пытаюсь достать значение свойства "FullName" одной организации
            var compareValue1 = excludeExpression3.Compile()(company1); 
            //потом пытаюсь достать значение свойства "FullName" другой организации
            var compareValue2 = excludeExpression3.Compile()(company2);
 
 
            if (compareValue1.ToString() == compareValue2.ToString()) return "yes";
 
            return "";
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы