.net лямбда-выражение - PullRequest
       5

.net лямбда-выражение

0 голосов
/ 05 января 2011

Может быть, то, что я пытаюсь достичь, это бессмысленно, но я думаю, что это должно работать У меня есть выражение

Expression<Func<Model.Document, bool>> expr1 = d => //something

Мне нужно разыграть это выражение в

Expression<Func<Model.Invoice, bool>

, где Model.Invoice наследуется от Model.Document

Возможно ли это?

1 Ответ

2 голосов
/ 05 января 2011

Это на самом деле не связано с лямбда-выражениями - это связано с деревьями выражений и Expression<TDelegate> в частности. Expression<TDelegate> является инвариантом в T - и даже если это не так, отношения между Func<Model.Document, bool> и Func<Model.Invoice, bool> не будут подходящими для ковариации, если я не ошибаюсь (что вполне возможно).

Я подозреваю, что вам нужно разбить Expression<T> и воссоздать его, что может быть не очень просто ... в качестве альтернативы вы можете добавить слой-оболочку вокруг существующего Expression<T>, будет почти эквивалентно высказыванию:

 Expression<Func<Invoice, bool>> = invoice => (d => ...)(invoice);
...