因为你的Single方法,接收的参数是Expression<Func<T, bool>>,如果你用一个lambda表达式:
i => i.Sub_Name == "11" && true;
它是可以被转化成一个Expression<Func<T,bool>>的。而这个lambda表达式
i => { return i.Sub_Name == "11" && true; }
不能隐式转换成Expression<Func<T,bool>>。原因你可以这么认为:由于你的lambda表达式里具有块语句,因此很难转换成对应的表达式语句。虽然你这句最终可以翻译成SQL的,但是编译器无法预估,因此包含块语句的lambda表达式直接不支持转成expression tree了。