Сумма двух выражений, которые возвращают число

1

У меня есть список и запрос, который просто определяется как это:

var list = new List<int>();

for (var i = 0; i < 4; i++)
{
    list.Add(i);
}

var query = list.AsQueryable();

Теперь у меня есть Expression которое возвращает квадрат числа:

private static Expression<Func<int, int>> Square()
{
    return i => i * i;
}

и третья сила:

private static Expression<Func<int, int>> Third()
{
    return i => i * i * i;
}

Я хочу, чтобы иметь возможность выбрать сумму из них в выражении Select с кодом, подобным этому псевдокоду:

var result = query.Select(Square() + Third()).ToList();

Я ожидаю, что результат будет

0
2
12
36

Есть ли способ легко достичь этого, или я должен сделать это по-другому?

PS имейте в виду, методы упрощены, чтобы подчеркнуть для удобства определения проблемы.

PS Я использую выражения, потому что это упрощённый пример проблемы Linq-to-entities, и я понял, что я могу использовать только IQueryable по этому вопросу.

  • 4
    Это должно называться Cube() , а не Third() .
  • 0
    Видимо, я забыл указать, что буду использовать это для linq для сущностей; (По словам blogs.msdn.com/b/meek/archive/2008/05/02/… Я должен использовать выражения. В настоящий момент я чувствую себя глупо для упрощения вопроса. Или, может быть, я ошибаюсь, и вы можете выполнить задачу без выражений?
Показать ещё 2 комментария
Теги:
linq
expression
iqueryable

1 ответ

1
Лучший ответ

Если вам нужны деревья выражений, используйте метод Expression.Add static на Square().Body и Third().Body.

Если вам просто нужны делегаты, используйте x => Square().Compile()(x) + Third().Compile()(x).

  • 0
    Вам также нужно будет переписать параметры.
  • 0
    @ СЛакс Я согласен, в моем ответе отсутствуют некоторые детали. Ему нужно создать целое новое дерево выражений с нуля, но Expression.Add является основным компонентом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню