我已经为两个主实体customer
和相关实体(订单)编译了查询。性能 - 通过导航属性获取数据与编译后的查询
var customer = MyService.GetCustomer<Customer>().where(c => c.Id == fooId).ToList();
var customerOrders = MyService.GetOrders<Order>().where(o => o.CustomerId == fooId && o.IsActive).ToList();
,但我想我可以通过导航属性,而不是编译的查询所有订单的呼叫,因为customer
已经被下面的代码加载到内存中:
var customerOrders = customer.Orders.where(o => o.IsActive).ToList(); // I didn't do filter further more
但是,当我测量定时我不能没有发现任何相当大的差异(该数据库有500个客户和4000个订单,每个特定客户有30个活动订单和大约400个非活动订单)。
这两个中哪一个会有更好的表现?
我也不能完全理解这related question
因此,在这种情况下,导航属性查询比complied查询更好? – ManirajSS 2015-01-21 08:48:34
我没有完全明白你编译查询的意思。但Linq to Entities只提供少量的支持功能。如果超过这些要求从数据库中获取更多数据,那么使用完整的数据进行计算和可能的减少,然后降低性能。看看这里https://msdn.microsoft.com/en-us/library/bb738550.aspx – 2015-01-21 09:03:35
例如,如果你使用一些正则表达式来过滤你的数据,你将不得不调用例如.ToList()或.AsEnumerable( ),它将SQL语句发送到数据库并将结果集映射到对象。然后,您可以使用Linq to Objects来执行基于Regex的过滤 – 2015-01-21 09:09:08