永利棋牌官方下载-www.55402.com-永利国际唯一指定官网

永利棋牌官方下载提供最新最好玩的真人游戏,www.55402.com是澳门国际娱乐平台官方网站唯一授权会员登录手机版,www.316net,www.366net,516.net,626.net,766.net,www.565.net,www.16.net,bwin62.com,bwin180.com,永利国际唯一指定官网为新老顾客提供更多的精彩娱乐项目,,所有的玩家都可以得到注册送体验金的巨大福利是设身处地为玩家量身订造的经典网站。

怎样使用表达式树生成动态查询

Example

上边这段代码呈现怎么样行使表达式树去围绕 IQueryable怎样使用表达式树生成动态查询。 数据源构造一个查询并运转。代码生成了三个表达式树来代表查询:

companies.Where(company => (company.ToLower() == "coho winery" || company.Length > 16)).OrderBy(company => company)

怎样使用表达式树生成动态查询。在命名空间 [System.Linq.Expressions](https://docs.microsoft.com/en-us/dotnet/api/system.linq.expressions)怎样使用表达式树生成动态查询。 下有个工厂方法用来生成一个表明式树来代表那一个查询。表示行业内部查询运算符方法调用的表明式将援用这个方法的 Queryable 的兑现。最后表明式树被传送给 IQueryable 数据源的提供程序的 CreateQuery(Expression) 实现,以创办一个可进行的 IQueryable 类型的查询。通过枚举该查询获得结果。

Expression<Func<string, bool>> expr = name => name.Length > 10 && name.StartsWith("G");
Console.WriteLine(expr);

AndAlsoModifier treeModifier = new AndAlsoModifier();
Expression modifierExpr = treeModifier.Modify(expr);

Console.WriteLine(modifierExpr);

string[] companies = {"Consolidated Messenger", "Alpine Ski House", "Southridge Video", "City Power & Light",
        "Coho Winery", "Wide World Importers", "Graphic Design Institute", "Adventure Works",
        "Humongous Insurance", "Woodgrove Bank", "Margie's Travel", "Northwind Traders",
        "Blue Yonder Airlines", "Trey Research", "The Phone Company",
        "Wingtip Toys", "Lucerne Publishing", "Fourth Coffee" };
//转化IQueryable数据源
IQueryable<string> queryableData = companies.AsQueryable();
//编写表示谓词参数的表达式树
ParameterExpression pe = Expression.Parameter(typeof(string), "company");
//新建一个表达式树来表示 'company.ToLower() == "coho winery"' 的表达式
Expression left = Expression.Call(pe, typeof(string).GetMethod("ToLower", Type.EmptyTypes));
Expression right = Expression.Constant("coho winery", typeof(string));
Expression e1 = Expression.Equal(left, right);
//新建一个表达式树来表示 'company.Length > 16' 表达式
left = Expression.Property(pe, typeof(string).GetProperty("Length"));
right = Expression.Constant(16,typeof(int));
Expression e2 = Expression.GreaterThan(left, right);
//编译表达式树来生成一个表示'(company.ToLower() == "coho winery" || company.Length > 16)' 的表达式
Expression predicateBody = Expression.OrElse(e1, e2);
//新建一个表达式树来表示 'queryableData.Where(company => (company.ToLower() == "coho winery" || company.Length > 16))'
MethodCallExpression whereCallExpresstion = Expression.Call(
    typeof(Queryable),
    "Where",
    new Type[] { queryableData.ElementType },
    queryableData.Expression,
    Expression.Lambda<Func<string, bool>>(predicateBody, new ParameterExpression[] { pe }));

//排序 OrderBy(company => company)
//新建一个表达式树来表示 'whereCallExpression.OrderBy(company => company)'
MethodCallExpression orderCallExpresstion = Expression.Call(
    typeof(Queryable),
    "OrderBy",
    new Type[] { queryableData.ElementType, queryableData.ElementType },
    whereCallExpresstion,
    Expression.Lambda<Func<string, string>>(pe, new ParameterExpression[] { pe }));

//新建一个可执行的查询表达式树
IQueryable<string> result = queryableData.Provider.CreateQuery<string>(orderCallExpresstion);

//枚举结果
foreach (string company in companies)
    Console.WriteLine(company);

代码中在被传送到 Queryable.Where 方法中,在谓词中选择了二个永远数字。可是,你能够写三个应用程序,来编写翻译在谓词中叁个信任于客商输入的数字变量。你也得以依据客商的输入,改造查询中调用的科班查询操作符。

编写翻译代码

  • 成立新的调整台应用程序项目。
  • 累积对 System.Core.dll 的援引(如果没有援引)。
  • 席卷 System.Linq.Expressions 命名空间。
  • 从示例中复制代码,并将其粘贴到 Main 方法中。

[翻译]什么样利用表明式树生成动态查询

在LINQ,表明式树常用于结构化查询,目标能源数量完结了 IQueryable. 举例,LINQ为关系型数据存款和储蓄查询提供了 IQueryable 接口。C#编写翻译器将那么些数据源的询问编写翻译成运行时的表明式树代码。然后查询提供程序能够遍历表明式树数据结构,并转账为适当于数据源的询问语言。

在LINQ中动用表明式树来表示分配给 Expression 类型的兰姆da表明式变量。

那节首要叙述了怎么样接纳表明式树塑造叁个动态LINQ查询。在编写翻译期,动态查询在分外未知的询问的状态下是老大管用的。具体育赛事例,三个应用程序提供了四个客商接口,最后来允许客商钦定叁个或四个谓词来过滤数据。为了利用LINQ查询,这种状态应用程序在运营时必须使用表明式树来营造多个LINQ查询。

本文由永利棋牌官方下载发布于永利国际唯一指定官网,转载请注明出处:怎样使用表达式树生成动态查询

您可能还会对下面的文章感兴趣: