2009-01-07 25 views
8

開箱,System.Web.Security.Membership實行一對夫婦的搜索方式:如何最好地實現對會員提供自定義搜索

  • FindUsersByEmail
  • FindUsersByName

我使用WSAT project from CodePlex來管理我的會員資格數據庫。該工具在ProfileCommon類中實現額外的配置文件屬性。

假設我在用戶的個人資料中有一個名爲的公司

我需要實現一個自定義搜索方法來搜索公司屬性,我想這樣做的代碼。不想編寫存儲過程(因爲所有配置文件屬性都存儲在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

意識到MembershipUserCollection不實現IEnumerable 無論如何,這使事情變得複雜一點 – 2009-01-07 17:04:07

回答

3

得到了一個linq好的同事的幫助。這裏的挑戰是MembershipUserCollection不實現IEnumerable < T>(!)。

 List<MembershipUser> searchResults = allUsers.Where(user => 
     Profile.GetProfile(user.UserName).Firm.ToLowerInvariant() 
     .Contains(firmName.ToLowerInvariant())).ToList(); 
在這種情況下ALLUSERS

是一個名單,我曾與在Membership.GetAllUsers的項目來填充()集合。

22

那麼你不能只是施展它?

IEnumerable<MembershipUser> searchResults = Membership.GetAllUsers().Cast<MembershipUser>(); 

希望這有助於你們

+0

我使用了這種方法,它的工作非常完美。謝謝! – 2009-06-05 22:07:22

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; 
      } 
     } 
    } 
} 

它還轉換MembershipUserCollectionIEnumerable<MembershipUser>因此所有其他之後LINQ方法起作用。

0

微軟公司沒有內置函數。下面是搜索會員用戶的用戶名和電子郵件地址
實例的例子:
請複製下面的功能和實現它 - 完成...

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(); 
     } 
相關問題