C#Asp.net Membership.GetAllUsers通过电子邮件订购

我正在使用Membership.GetAllUsers()来获取我的用户列表。 我希望按电子邮件地址排序返回列表,因为我需要标记一些带有重复电子邮件的帐户。

Membership.GetAllUsers()似乎默认按用户名排序。 有没有办法改变这种行为?

如果您可以使用通用列表而不是MembershipUserCollection

 Membership.GetAllUsers().Cast().OrderBy(x => x.Email).ToList(); 

如果您想要一个不区分大小写的电子邮件地址OrderBy(x => x.Email, StringComparer.OrdinalIgnoreCase)请使用OrderBy(x => x.Email, StringComparer.OrdinalIgnoreCase)

成员资格代码实际上早于generics(它从.NET 1.1开发集成到.NET 2.0中),因此MembershipUserCollection不实现通用接口。

鉴于您之前的问题 ,您可能对其他LINQ风格的操作感兴趣。 例如,下面的代码将为您提供一个字典,其键是电子邮件地址(不区分大小写),其值是相应的MembershipUser对象的列表,按上次活动日期降序排序:

 var dictionary = Membership.GetAllUsers().Cast() .GroupBy(x => x.Email, StringComparer.OrdinalIgnoreCase) .ToDictionary( x => x.Key, x =>x.OrderByDescending(u => u.LastActivityDate).ToList() ); 

以下代码应该这样做,但它可能没有最佳性能。

 Membership.GetAllUsers().Cast().OrderBy(m => m.Email); 

它在内存中进行排序,而不是作为db查询。

 Membership.GetAllUsers().OrderBy(user => user.Email).ToList();