DateTime лямбда-выражения - PullRequest
0 голосов
/ 01 октября 2018

Я тестировал реализацию в ответе потока https://stackoverflow.com/a/7891426/1468492, но я получаю сообщение об ошибке при попытке проанализировать выражение с DateTime, например: t => t.Name == "NAME" && t.OpeningDate == DateTime.Now.

Это правильный способ построения лямбда-выражения DateTime?Если я создаю выражение типа Expression<Func<Model, bool>> expression = t => t.Name == "NAME", результат будет правильным.

Что-то не так?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вам нужно улучшить текущее решение для поддержки участников, особенно вам нужно улучшить VisitMember.Теперь он просто выбрасывает NotSupportedException.

. В качестве обходного пути вы можете просто извлечь его первым:

DateTime now = DateTime.Now;
var expression = t => t.Name == "NAME" && t.OpeningDate == now;

В этом случае он будет обращаться к константе, а не к члену.

0 голосов
/ 01 октября 2018

Если вы можете построить выражение t => t.Name == "NAME", следующий шаг - объединить его с t.OpeningDate == DateTime.Now на Expression.And.Попробуйте этот код:

var t = Expression.Parameter(typeof(Model), "t");
var body = Expression.And(
    Expression.Equal(Expression.PropertyOrField(t, "Name"), Expression.Constant("NAME")),
    Expression.Equal(Expression.PropertyOrField(t, "OpeningDate"), Expression.Constant(DateTime.Now))
);
var predicate = Expression.Lambda<Func<Model, bool>>(body, t);
...