已经有一种方法返回IEnumerable<User>
,我一直在使用Linq/Entity Framework/SQL Server来返回结果。Linq complex - 枚举性能
我(刚返回数据到客户端之前在LINQ语句,链的末端)穿过一个艰难的条件scenario,这是更容易在C#迭代解决了Web服务器上就来了:
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#方式的理解。
谢谢sinelaw。同意你的观点。特别感谢在linq上看到如何做到这一点 - 能够简单地以功能性的方式表达它真是太棒了! –