.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 "";
}