如果不真正放下过去,就不会有明天。
Program.cs
class Program
{
static void Main(string[] args)
{
string[] companies = {"综合即时通","高山滑雪之家","绍斯里奇","城市电力和照明",
"Coho酒庄","世界各地的入侵者","平面设计学院","冒险工程",
"Humongous保险","Woodgrove银行","Margie的旅行","Northwind贸易商",
"Blue Yonder航空公司","Trey研究","电话公司", "翼尖玩具","卢塞恩出版","第四届咖啡"};
IQueryable<String> queryableData = companies.AsQueryable<string>();
ParameterExpression pe = Expression.Parameter(typeof(string), "company");
Expression left = Expression.Call(pe, typeof(string).GetMethod("ToLower", System.Type.EmptyTypes));
Expression right = Expression.Constant("coho酒庄");
Expression e1 = Expression.Equal(left, right);
left = Expression.Property(pe, typeof(string).GetProperty("Length"));
right = Expression.Constant(8, typeof(int));
Expression e2 = Expression.GreaterThan(left, right);
Expression predicateBody = Expression.OrElse(e1, e2);
MethodCallExpression whereCallExpression = Expression.Call(
typeof(Queryable),
"Where",
new Type[] { queryableData.ElementType },
queryableData.Expression,
Expression.Lambda<Func<string, bool>>(predicateBody, new ParameterExpression[] { pe }));
MethodCallExpression orderByCallExpression = Expression.Call(
typeof(Queryable),
"OrderBy",
new Type[] { queryableData.ElementType, queryableData.ElementType },
whereCallExpression,
Expression.Lambda<Func<string, string>>(pe, new ParameterExpression[] { pe }));
IQueryable<string> results = queryableData.Provider.CreateQuery<string>(orderByCallExpression);
foreach (string company in results)
{
Console.WriteLine(company);
}
Console.ReadLine();
}
}
运行结果如图:
