排列五三公博彩平台_C#抒发式中的动态查询


发布日期:2023-10-30 04:27    点击次数:206


排列五三公博彩平台_C#抒发式中的动态查询

排列五三公博彩平台_

葡京娱乐炸金花

当您使用LINQ来处理数据库时,这种体验是一种神奇的体验,对吗?你把数据库实体像一个粗拙的采集,使用Linq中像Where,Select或者 Take,这些大约的使用就能让代码可用了。

排列五三公皇冠体育博彩平台最近加入了多项最热门的博彩游戏和赛事直播,包括足球、篮球、棒球、斯诺克等,让您在博彩游戏中尽情享受乐趣和收益。我们提供最专业的博彩攻略和技巧分享,让您在博彩游戏中游刃有余。我们的平台安全稳定,操作简便,充值提款便捷,为您提供最佳的博彩体验和最高的博彩收益。

关联词,让咱们探求一下这里是怎样通过动态查询和抒发式树兑现此功能的:幕后发生的事情。您编写的LINQ查询将调理为SQL(或其他花式),并将该SQL查询发送到数据库。然后将数据库的反应映射到C#对象。关联词,怎样统统调理为SQL?

在本文中,您将看到诸如Entity Framework和MongoDB C#驱动谬误之类的框架怎样使用抒发式树进行调理。您将看到怎样躬利用用抒发式树来构建动态查询。这些查询是您无法在编译时创建的查询,因为您将知谈该查询仅在运转时的外不雅。

对可查询树和抒发式树进行揭秘

探求以下使用Entity Framework 6的C#代码:

SQL:SELECT     [Extent1].[StudentID] AS [StudentID],     [Extent1].[StudentName] AS [StudentName],     [Extent1].[DateOfBirth] AS [DateOfBirth],     FROM [dbo].[Students] AS [Extent1]     WHERE N'Billie' = [Extent1].[StudentName] 

请注目,WHERESQL查询中有一个操作。那不是很彰着。若是SQL不包含WHERE,则悉数学生齐将从数据库中带走,而况筛选将在.NET进度中实行。本体上,以下代码不错作念到这少许:

足球赌球软件
//BAD: DbSet<Student> students = context.Students; Func<Student, bool> predicate = s => s.StudentName == "Billie"; var x = students.Where(predicate).ToList(); 

在终末一个示例中,SQL查询使悉数学生投入历程,并将其映射到成例研究。不同之处在于,在第一段代码中,lambda是一个Expression

足球比赛押注平台推荐

第二段代码在性能,内存和蚁集方面很厄运。咱们从蚁齐集赢得了很多对象,而不是仅从数据库中赢得一个姿首。然后,咱们使用CPU将它们序列化为C#对象。并用完内存将它们存储在进度的堆中。

因此,让咱们回到第一段代码。怎样await students.Where(s => s.StudentName == "Billie").ToListAsync()产生一个包含的SQL查询WHERE N'Billie' = [Extent1].[StudentName]?

谜底是抒发树。该代码s => s.StudentName == "Billie"本体上是一个结构化查询,不错通过编程将其宗旨为节点树。在此示例中,有6个节点。最顶层的节点是lambda抒发式。左侧是lambda参数。在它的右边是Equal暗示抒发式的lambda主体。实体框架具有遍历这些抒发式树并构造SQL查询的算法。其他数据源提供谬误(如Mongo DB C#驱动谬误)也会发生一样的事情,除了它会构造一个MongoDB json查询。

C#抒发式树

皇冠hg86a

在第一段代码中,欧博在线类型s => s.StudentName == "Billie"为Expression

好的,关联词我该怎样利用它呢?

在大无数情况下,使用抒发树的东谈主们便是在构建寰宇实体框架的东谈主们。关联词在某些特定情况下,它变得非常灵验。这是咱们最近在Ozcode[1](我的平日责任)中遭受的一个用例:

咱们思在名为Error的数据库实体上创建动态就业器端过滤。该实体具有很多属性,咱们但愿允许用户对其进行过滤。因此过滤应笔据被允许Username,Country,Version,或任何其他财产。这是咱们需要兑现的API:

皇冠十三水APP下载皇冠体育开户
IQueryable<Error> _errors;  public IEnumerable<Error> GetErrors(string propertyToFilter, string value){ /*..*/}  

在这种情况下,propertyToFilter是的属性Error。使用成例的LINQ,独一的规律便是使用浩大的switch / case语句。有点像这么:

东方环宇董秘:尊敬的投资者您好:在所取得燃气特许经营服务区域内,公司天然气输配管网长度已覆盖整个昌吉市建成区及部分乡镇。公司燃气供热业务主要以企业用户居多。谢谢

IQueryable<Error> _errors;  public IEnumerable<Error> GetErrors(string propertyToFilter, string value) {     switch (propertyToFilter)     {         case "Username":             return await _errors.Where(e=> e.Username == value).ToListAsync();         case "Country":             return await _errors.Where(e=> e.Country == value).ToListAsync();         case "Version":             return await _errors.Where(e=> e.Version == value).ToListAsync();         // ...             } } 

您可能会容许这不是理思的罗致。除了必须编写悉数这些东西以外,它还非常容易出现作假。若是添加了属性奈何办?若是重定名奈何办?通盘事情一团糟。

通过动态查询和抒发式树不错兑现此功能的规律如下:

iba百家乐注册
private async static Task<IEnumerable<Error>> GetErrors(string propertyToFilter, string value) {     var error = Expression.Parameter(typeof(Error));     var memberAccess = Expression.PropertyOrField(error, propertyToFilter);     var exprRight = Expression.Constant(value);     var equalExpr = Expression.Equal(memberAccess, exprRight);     Expression<Func<Error, bool>> lambda = Expression.Lambda<Func<Error, bool>>(equalExpr, error);      return await _errors.Where(lambda).ToListAsync(); } 

这里的每一转代码代表抒发式树中的一个节点。它们共同组成了最高节点-lambda。然后,不错在LINQ中使用动态抒发式,并生建树业器端SQL查询。我觉得很好。

处罚此问题的另一种规律是构建自界说SQL查询字符串。在Ozcode中,咱们使用的是MongoDB,因此SQL不符合使用,但咱们不错创建一个自界说的MongoDB JSON查询字符串。也不是太难,关联词我觉得抒发式树规律愈加机动和可靠。一方面,您不错将其放在LINQ中并与其他LINQ运算符组合。此外,当有诸如Entity Framework之类的经过测试的框架不错为您实行此操作时,为什么还要编写我方的查询。

纲目

追想一下。这是本文中的一些谬误点:

博彩平台信用卡皇冠客服飞机:@seo3687 成例函数/托福与抒发式之间的差别在于,抒发式不错用结构化树暗示。不错精真金不怕火地分析该树以创建诸如数据库查询之类的东西。 因循抒发式的数据源兑现该IQueryable接口。 若是您无法使用抒发式(以及使用成例规律或托福),则查询将在就业器端而不在数据库端,这关于性能而言将是可怕的。 使用lambda(不带主体)时,抒发式是无缝创建的,因此这些年来您可能一直齐在这么作念。 您不错我方使用抒发式树来创建动态查询。这在无法在编译时仅在运转时构建查询的情况下很灵验。

References

[1] Ozcode: https://oz-code.com 

[2]: https://www.mediavine.com/葡京娱乐炸金花