public void TestGetValue_Complex() { var test = new LambdaTest1() { Name = "a", A = new LambdaTest1.TestA() { Address = "b" } }; //获取表达式的值 Expression <Func <LambdaTest1, bool> > expression = t => t.Name == test.Name; Assert.AreEqual("a", LambdaHelper.GetValue(expression), "==test.Name"); Expression <Func <LambdaTest1, bool> > expression2 = t => t.Name == test.A.Address; Assert.AreEqual("b", LambdaHelper.GetValue(expression2), "==test.A.Address"); //获取方法的值 Expression <Func <LambdaTest1, bool> > expression3 = t => t.Name.Contains(test.Name); Assert.AreEqual("a", LambdaHelper.GetValue(expression3), "Contains test.Name"); Expression <Func <LambdaTest1, bool> > expression4 = t => t.Name.Contains(test.A.Address); Assert.AreEqual("b", LambdaHelper.GetValue(expression4), "==test.A.Address"); }
public void TestGetValue_Enum() { var lambdaTestEnum = new LambdaTest1(); lambdaTestEnum.NullableEnumValue = LogType.Error; //属性为枚举,值为枚举 Expression <Func <LambdaTest1, bool> > expression = test => test.EnumValue == LogType.Debug; Assert.AreEqual(LogType.Debug.Value(), LambdaHelper.GetValue(expression)); //属性为枚举,值为可空枚举 expression = test => test.EnumValue == lambdaTestEnum.NullableEnumValue; Assert.AreEqual(LogType.Error, LambdaHelper.GetValue(expression)); //属性为可空枚举,值为枚举 expression = test => test.NullableEnumValue == LogType.Debug; Assert.AreEqual(LogType.Debug, LambdaHelper.GetValue(expression)); //属性为可空枚举,值为可空枚举 expression = test => test.NullableEnumValue == lambdaTestEnum.NullableEnumValue; Assert.AreEqual(LogType.Error, LambdaHelper.GetValue(expression)); //属性为可空枚举,值为null lambdaTestEnum.NullableEnumValue = null; expression = test => test.NullableEnumValue == lambdaTestEnum.NullableEnumValue; Assert.AreEqual(null, LambdaHelper.GetValue(expression)); }
public void TestGetValue_Instance() { var test = new LambdaTest1() { Name = "a", A = new LambdaTest1.TestA() { Address = "b", B = new LambdaTest1.TestA.TestB() { Name = "c" } } }; //一级属性 Expression <Func <string> > expression = () => test.Name; Assert.AreEqual("a", LambdaHelper.GetValue(expression)); //二级属性 Expression <Func <string> > expression2 = () => test.A.Address; Assert.AreEqual("b", LambdaHelper.GetValue(expression2)); //三级属性 Expression <Func <string> > expression3 = () => test.A.B.Name; Assert.AreEqual("c", LambdaHelper.GetValue(expression3)); }