표현 트리는 바이트와 단점을 사용하여 작업 할 때 불필요한 변환을 만드는 것처럼 보입니다. 두 표현식 (예 : 이진 표현식)이 int32로 변환됩니다.표현 트리 - int32로 불필요한 변환
이것은 제가 본 Linq 제공 업체의 문제입니다. 각각의 중복 레이어를 떼어내어 원래 표현식에 도달해야합니다. (NHibernate는이 계층을 제거하지 않고 SQL 질의에 끔찍한 CAST를 생성합니다).
// 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 64 비트는 같은 4.5 정말 흥미로운 64 비트
어떤 버전의 C# 컴파일러를 사용하고 있습니까? 이 단계에서 내 유일한 추측은'int' 평등은'int' (짧은 타입이 평가 스택 상에 존재할 수 없다)에 대해서 정의 된 .NET에서의 원시 연산의 빌드이며, 그것은 어떻게 든 인자가된다는 것입니다 이리. –