已經有一種方法返回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上看到如何做到這一點 - 能夠簡單地以功能性的方式表達它真是太棒了! –