当我只要求一列时,为什么EntityFramework会返回整个对象?

时间:2013-11-28 15:45:59

标签: entity-framework

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

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();

2 个答案:

答案 0 :(得分:4)

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

尝试这样的事情:

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

答案 1 :(得分:2)

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