Дерево выражений C # не принимает True

#c# #asp.net #asp.net-core

#c# #asp.net #asp.net-core

Вопрос:

У меня есть следующее выражение, в которое мне нужно добавить условие always true

 string tenantId = "";

Expression<Func<MongoIdentityUser, bool>> baseFilter = t => t.IsActive == true amp;amp; t.IsApproved == true;

var constExpression = Expression.Constant(tenantId);
var paramExpression = baseFilter.Parameters[0]; //using the base filter paramater t=>
var callExp = Expression.PropertyOrField(paramExpression, "TenantId");
var ifParamIsNull = Expression.Equal(paramExpression, Expression.Constant(true));
var ifParamIsNotNull = Expression.Equal(callExp, constExpression);

var AndExp = Expression.AndAlso(baseFilter.Body, string.IsNullOrWhiteSpace(tenantId) ? ifParamIsNull : ifParamIsNotNull);

var result =  Expression.Lambda<Func<MongoIdentityUser, bool>>(AndExp, paramExpression);

Console.WriteLine(result);
  

при запуске кода я получил следующую ошибку
введите описание изображения здесь

Ниже приводится сообщение об исключении

Необработанное исключение. Система.Исключение InvalidOperationException: двоичный оператор Equal не определен для LMS.Entities типов.Доменные модели.Идентификация.MongoIdentityUser’ и ‘System.Логическое значение’.

Пока мне нужен следующий вывод

 t => t.IsActive == true amp;amp; t.IsApproved == true amp;amp; true
  

Если я изменю значение true на null в приведенном ниже коде выражения, все будет нормально

  var ifParamIsNull = Expression.Equal(paramExpression, Expression.Constant(null));
  

Комментарии:

1. В первом блоке ifParamIsNull присваивается выражение t == true . Поскольку t это MongoIdentityUser , это, очевидно, не сработает. В последнем случае оно присваивается выражению t == null , которое является допустимым и выглядит так, как указано в имени переменной. Похоже, вы это исправили. В чем ваш вопрос?

2. @madreflection на самом деле мне нужно t => true в выходных данных. Я пытаюсь создать следующее дерево выражений t => t.isActive == true amp;amp; t.IsApproved == true amp;amp; true

3. Между t == true и true есть большая разница. Выражение Expression.Equal(paramExpression, Expression.Constant(true)) — это сравнение t с true . Можете ли вы объяснить, зачем вам вообще нужно такое странное выражение? Это похоже на проблему XY.

4. amp;amp; true это логическая идентичность, поэтому она вообще не влияет на состояние. Вам это не нужно.

5. вы правы. Я использовал неправильный путь. Просто решите проблему, изменив логику.