有一个返回的方法IEnumerable<User>
,我一直在使用 Linq / Entity Framework / SQL Server 来返回结果。
我遇到了一个困难的条件场景,在 Web 服务器上的 C# 迭代中更容易解决(在 linq 语句链的末尾,就在将数据返回给客户端之前):
public IEnumerable<User> ReturnUsersNotInRoles()
{
IQueryable<User> z = (from users
//...many joins..conditions...
).Distinct().Include(x => x.RoleUserLinks).ToList()
IEnumerable<User> list = new List<User>();
foreach (User user in z)
{
bool shouldReturnUser = true;
foreach (var rul in user.RoleUserLinks)
{
if (rul.LinkStatusID == (byte)Enums.LinkStatus.Added)
shouldReturnUser = false;
}
if (shouldReturnUser)
list.Add(user);
}
return list;
}
问题:在 C# 中是否有更高效/更少内存开销的方式来执行此操作?
我只是从 Linq 带回我需要的实体。没有N+1的情况。目前的表现非常出色。
我意识到理想情况下我会在 SQL / Linq 中编写它,因为那时 SQL Server 会发挥它的魔力并快速为我提供数据。但是,我正在平衡这与潜在的 v.hard 查询来理解,以及当前具有迭代的出色性能,以及易于理解 C# 方式。