C# 艾尔·马克斯回来了。如果这看起来有些过分,我建议您为它们生成单独的语句,并将它们发送到SQL Server进行处理。一般来说,在减少的结果集上,客户端处理的结果与服务器处理的结果相同或更好。
根据您提供的信息,我看不出您的EF代码有任何错误。大多数现在使用LINQ扩展方法来完成他们所需要的,因为它不像直接LINQ那样冗长。我确实相信它们最终会被转换成扩展方法 林克:C# 艾尔·马克斯回来了。如果这看起来有些过分,我建议您为它们生成单独的语句,并将它们发送到SQL Server进行处理。一般来说,在减少的结果集上,客户端处理的结果与服务器处理的结果相同或更好。,c#,vb.net,entity-framework,data-binding,ado.net,C#,Vb.net,Entity Framework,Data Binding,Ado.net,根据您提供的信息,我看不出您的EF代码有任何错误。大多数现在使用LINQ扩展方法来完成他们所需要的,因为它不像直接LINQ那样冗长。我确实相信它们最终会被转换成扩展方法 林克: 从dbContext.MyTable中的记录中选择新的{record.Start\u Date} LINQ扩展: dbContext.MyTable.Select(x=>new{x.Start\u Date}) 看看它们是如何变短并传达相同的意思 你选择你感兴趣的领域也是一个很好的习惯。它将减少发送到服务器的查询的大小,
从dbContext.MyTable中的记录中选择新的{record.Start\u Date}代码>
LINQ扩展:
dbContext.MyTable.Select(x=>new{x.Start\u Date})代码>
看看它们是如何变短并传达相同的意思
你选择你感兴趣的领域也是一个很好的习惯。它将减少发送到服务器的查询的大小,还将减少服务器返回的结果
您使用的是using
语句,因此上下文将被释放,不使用时不会使连接保持打开状态。这是好的,但是对于winform应用程序,上下文是否应该在显示的表单的生命周期内存在是有争议的
一般环境足迹
当您使用LINQ创建条件时,实际上这是一个正在生成的SQL语句,并且还没有执行任何操作。在访问查询结果之前,需要“具体化”结果。要做到这一点,您只需要从查询中访问一个元素,将其发送到服务器以获取结果。您可以使用ToList
来执行此操作。除非仍在有条件地构建查询,否则应该始终这样做
非常重要的一点是,在大多数情况下,延迟加载并不是一件好事。这非常方便,但它可以创建n+1条件,而且性能会受到影响,因为您在父集合上访问的每个子集合项都会生成一个查询来获取它。在这里,使用像AutoMapper
这样的工具或使用Include
语句可以一次性从服务器获取所有信息
例如:var orderWithDetails=db.Orders.Include(order=>order.LineItems).FirstOrDefault(order=>order.Id==4)
将生成一条SQL语句,该语句将选择id为4的订单,并生成额外的SQL以选择与之关联的所有记录。如果不这样做并且启用了延迟加载,则可能会生成多个子查询,从而影响性能
重要的是要记住,ORM只是让我们更容易访问数据,而不需要对系统的其他组件进行性能测试
编辑:
我觉得这应该包括在内,@BrunoMonteiro确实指出了这一点。当您选择不同的日期时,您是通过一个具体化的查询来完成的,dates
。因此,所有这些都将发生在客户机上,而不是SQL Server上。根据与从Where
子句返回的记录集关联的记录数,这可能是一个问题
您应该看到返回的数量和可能返回的最大值。如果这看起来有些过分,我建议您为它们生成单独的语句,并将它们发送到SQL Server进行处理。一般来说,在减少的结果集上,客户端处理的结果与服务器处理的结果相同或更好。根据您提供的信息,我看不出您的EF代码有任何错误。大多数现在使用LINQ扩展方法来完成他们所需要的,因为它不像直接LINQ那样冗长。我确实相信它们最终会被转换成扩展方法
林克:
从dbContext.MyTable中的记录中选择新的{record.Start\u Date}代码>
LINQ扩展:
dbContext.MyTable.Select(x=>new{x.Start\u Date})代码>
看看它们是如何变短并传达相同的意思
你选择你感兴趣的领域也是一个很好的习惯。它将减少发送到服务器的查询的大小,还将减少服务器返回的结果
您使用的是using
语句,因此上下文将被释放,不使用时不会使连接保持打开状态。这是好的,但是对于winform应用程序,上下文是否应该在显示的表单的生命周期内存在是有争议的
一般环境足迹
当您使用LINQ创建条件时,实际上这是一个正在生成的SQL语句,并且还没有执行任何操作。在访问查询结果之前,需要“具体化”结果。要做到这一点,您只需要从查询中访问一个元素,将其发送到服务器以获取结果。您可以使用ToList
来执行此操作。除非仍在有条件地构建查询,否则应该始终这样做
非常重要的一点是,在大多数情况下,延迟加载并不是一件好事。这非常方便,但它可以创建n+1条件,而且性能会受到影响,因为您在父集合上访问的每个子集合项都会生成一个查询来获取它。在这里,使用像AutoMapper
这样的工具或使用Include
语句可以一次性从服务器获取所有信息
例如:var orderWithDetails=db.Orders.Include(order=>order.LineItems).FirstOrDefault(order=>order.Id==4)
将生成一条SQL语句,该语句将选择id为4的订单,并生成额外的SQL以选择与之关联的所有记录。如果不这样做并且启用了延迟加载,则可能会生成多个子查询,从而影响性能
重要的是要记住,ORM只是让我们更容易访问数据,而不需要对系统的其他组件进行性能测试
编辑:
我觉得这是一件很有趣的事情