2013-11-28 62 views
1

我正在调查使用EntityFramework版本5的应用程序的网络性能低下。我尝试的一个选项是仅检索Id字段,而不是整个对象。但是,在Wireshark中检查,我发现无论如何都会传输所有对象。换句话说,以下两个代码块会导致完全相同的网络活动。有谁知道我可以如何导致数据库仅在第一个查询中返回Ids?为什么EntityFramework只返回一列时才返回整个对象?

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User) 
      .ToList() 
      .Select(u => u.Id) 
      .ToList(); 

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User) 
      .ToList(); 
+4

'.ToList()'物化的对象。基本上,执行查询。之后的任何事情都是LINQ to Objects。 – James

回答

4

.ToList()实现对象。基本上,执行查询。之后的任何事情都是LINQ to Objects。

尝试这样:

List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User.Id).ToList(); 
2
List<long> test = dbContext.UserActivities 
      .Where(ua => ua.Activity.Id == activityId) 
      .Select(ua => ua.User.Id).ToList(); 
+0

我在你的问题上正确纠正了我的查询(我的问题已经修复),我发现了一个小错误。 +1 – James

+0

@James +1右后卫:) – Aducci

+0

这正是我错过的。 – Manish

相关问题