Деревья выражений - ненужное преобразование в int32

Деревья выражений, похоже, создают ненужное преобразование при работе с байтами и шортами, они преобразуют обе стороны (например, в двоичных выражениях) в int32.

Это проблема у некоторых провайдеров Linq, которые я видел, каждый должен очистить этот избыточный слой, чтобы получить исходное выражение. (NHibernate не удаляет этот слой и создает ужасный CAST в запросе SQL).

// no conversion
Console.WriteLine((Expression<Func<int, int, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<short, short, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<byte, byte, bool>>) ((s, s1) => s == s1));

Если вы попытаетесь построить выражение, которое делает это точное сравнение (без преобразования), у вас все получится.

Итак, вопрос в том, что является причиной такого поведения?

РЕДАКТИРОВАТЬ .net 4.0 64bit, то же самое относится и к 4.5 64bit

Ответы на вопрос(2)

Ваш ответ на вопрос