public void WiteToStringWithReferenceTest() { var p = new People { Name = "fireasy" }; Expression <Func <Work, bool> > expression = (s) => s.People.Name == p.Name; Console.WriteLine(ExpressionWriter.WriteToString(expression)); }
public void WiteToStringWithConstantTest() { var str = "fireasy"; var p = new People { Age = 34 }; Expression <Func <People, bool> > expression = (s) => s.Name == str && s.Age == p.Age; Console.WriteLine(ExpressionWriter.WriteToString(expression)); }
/// <summary> /// 通过表达式计算出对应的缓存键。 /// </summary> /// <param name="expression"></param> /// <returns></returns> private static string GetKey(Expression expression) { var evalExp = PartialEvaluator.Eval(expression, TranslateProviderBase.EvaluatedLocallyFunc); var cacheKey = ExpressionWriter.WriteToString(evalExp); //使用md5进行hash编码 var md5 = new MD5CryptoServiceProvider(); byte[] data = md5.ComputeHash(Encoding.Unicode.GetBytes(cacheKey)); return("$." + Convert.ToBase64String(data, Base64FormattingOptions.None)); }
/// <summary> /// 通过表达式计算出对应的缓存键。 /// </summary> /// <param name="expression">作为 Key 的 Lambda 表达式。</param> /// <param name="prefix">用于区分缓存的前缀。</param> /// <returns></returns> public string Generate(Expression expression, params string[] prefix) { var evalExp = PartialEvaluator.Eval(expression, TranslateProviderBase.EvaluatedLocallyFunc); var cacheKey = ExpressionWriter.WriteToString(evalExp); //使用md5进行hash编码 var md5 = new MD5CryptoServiceProvider(); var data = md5.ComputeHash(Encoding.Unicode.GetBytes(cacheKey)); var sb = new StringBuilder(); foreach (var p in prefix) { if (!string.IsNullOrEmpty(p)) { sb.AppendFormat("{0}:", p); } } sb.Append(data.ToHex(true)); return(sb.ToString()); }
public void WiteToStringWithSubqueryTest() { Expression <Func <People, bool> > expression = (s) => s.Works.Count(t => t.Company == "aa") > 0; Console.WriteLine(ExpressionWriter.WriteToString(expression)); }
public void WiteToStringWithLengthTest() { Expression <Func <People, bool> > expression = (s) => s.Name.Length == 4; Console.WriteLine(ExpressionWriter.WriteToString(expression)); }
public void WriteToStringTest() { Expression <Func <People, bool> > expression = (s) => s.Age == 12; Console.WriteLine(ExpressionWriter.WriteToString(expression)); }