首页 > 解决方案 > 尝试优化 linq 查询

问题描述

我正在尝试创建一个linq查询来执行以下操作:

  1. 获取所有用户的计数
  2. 获取所有官方用户的数量
  3. 获取所有非官方用户的数量

到目前为止,我想出了以下内容:

var query = context.Users;

List<Users> users = query.ToList();
int totalUsers = users.Count;
int officialUsers = users.Where(s => s.IsOfficialUser).ToList().Count;
int nonOfficialUsers = users.Where(s => !s.IsOfficialUser).ToList().Count;

我不确定我.ToList()多次调用会对性能产生多大影响。所以我希望有办法优化查询还是我走在正确的轨道上?

标签: c#asp.net-mvclinq

解决方案


在物化列表上使用.ToList只会影响所需的内存量。虽然这在技术上可能会影响性能,但除非您拥有数百万用户,否则不太可能;在这种情况下,老实说,无论如何您都可能拥有可用的服务器 RAM。

.ToList当然不是必需的。您需要做的就是在这里计算差异,因此您可以跳过 ToList 和 Where(因为 Count 接受 Func)

int officialUsers = users.Count(s => s.IsOfficialUser);
int nonOfficialUsers = users.Count(s => !s.IsOfficialUser);

推荐阅读