开箱即用,System.Web.Security.Membership实现了几种搜索方法:
我正在使用WSAT project from CodePlex管理我的会员资格数据库。该工具在ProfileCommon类中实现额外的配置文件属性。
假设我在用户的个人资料中有一个名为 Firm 的属性。
我需要实现一个自定义搜索方法来搜索Firm属性,我想在代码中完成所有操作。不想编写存储过程(因为所有配置文件属性都存储在WSAT工具的1个数据库列中)。
这样的事情显然不是正确的方法,但这里只是演示访问用户的个人资料属性:
private MembershipUserCollection SearchByFirm(string firmName, MembershipUserCollection allRegisteredUsers)
{
MembershipUserCollection searchResults = new MembershipUserCollection();
foreach (MembershipUser user in allRegisteredUsers)
{
ProfileCommon profile = Profile.GetProfile(user.UserName);
if (profile.Firm.ToLowerInvariant().Contains(firmName.ToLowerInvariant()))
{
searchResults.Add(user);
}
}
return searchResults;
}
我可以把它变成一些LINQ善良吗?
答案 0 :(得分:22)
你能不能投它吗?
IEnumerable<MembershipUser> searchResults = Membership.GetAllUsers().Cast<MembershipUser>();
希望这可以帮助你们
答案 1 :(得分:3)
得到了一位对linq很好的同事的帮助。这里的挑战是MembershipUserCollection不实现IEnumerable&lt; T> (!)。
List<MembershipUser> searchResults = allUsers.Where(user =>
Profile.GetProfile(user.UserName).Firm.ToLowerInvariant()
.Contains(firmName.ToLowerInvariant())).ToList();
在这种情况下,allUsers是一个List,我必须填充Membership.GetAllUsers()集合中的项目。
答案 2 :(得分:0)
只是为了记录我创建了这个扩展方法,我认为它有点工作:
namespace WebDibaelsaMVC.Utils.MembershipUserCollectionExtensions
{
public static class MembershipUserCollectionExtensions
{
public static IEnumerable<MembershipUser> Where(this MembershipUserCollection userCollection,Func<MembershipUser,bool> func)
{
foreach (MembershipUser membershipUser in userCollection)
{
if (func(membershipUser))
yield return membershipUser;
}
}
}
}
它还会将MembershipUserCollection
转换为IEnumerable<MembershipUser>
,以便之后所有其他LINQ方法都能正常工作。
答案 3 :(得分:0)
microsoft没有提供内置功能。以下是具有UserName和电子邮件地址的搜索成员资格用户的示例
示例:强>
只需复制以下功能并实施 - 完成...
Public List<MembershipUser> SearchMembershipUser(string strUserName, String strEmail)
{
IEnumerable<MembershipUser> MUser;
if ((!string.IsNullOrEmpty(strUserName) || !string.IsNullOrEmpty(strEmail)))
{
if (!string.IsNullOrEmpty(strUserName) && !string.IsNullOrEmpty(strEmail))
{
MUser = Membership.GetAllUsers().Cast<MembershipUser>()
.Where(x => x.UserName != CurrentUser && x.UserName == strUserName && x.Email == strEmail);
}
else if (!string.IsNullOrEmpty(strUserName))
{
MUser = Membership.GetAllUsers().Cast<MembershipUser>()
.Where(x => x.UserName != CurrentUser && x.UserName == strUserName);
}
else
{
MUser = Membership.GetAllUsers().Cast<MembershipUser>()
.Where(x => x.UserName != CurrentUser && x.Email == strEmail);
}
}
else
{
MUser = Membership.GetAllUsers().Cast<MembershipUser>().Where(x => x.UserName != CurrentUser);
}
return MUser.OrderBy(x => x.UserName).ToList();
}