2011-03-24 42 views
1

使用ASP.net,是否有建議的最佳方式來訪問代碼中的配置文件的特定字段。我正在查看舊版的Problem-Design-Solution 2.0書籍,它通過拉取數據庫中的所有成員,然後迭代每個人的個人資料(請參閱下面的代碼)來完成此工作。有沒有更好的辦法?檢查所有配置文件中的設置的最佳方法

for each (MembershipUser user in Membership.GetAllUsers()) 
{ 
    ProfileCommon userProfile = profile.GetProfile(user.UserName); 
    if (userProfile.mysetting == desiredValue) 
    { 
     //do something 
    } 
} 

編輯1

我發現,它可以比牽引部件,然後拉型材更有效地做了一些。這是可能的,並不是所有的成員有一個配置文件,所以如果你使用下面的代碼,你把所有的配置文件(這可能是比會員數量少,然後就可以通過它進行迭代:

for each (ProfileInfo theProfile in ProfileManager.GetAllProfiles (ProfileAuthenticationOption.All) 
{ 
    ProfileCommon pc = ProfileBase.Create(theProfile.UserName) 
    if (pc.mysetting == desiredValue) 
    { 
     //do something 
    } 
} 

它仍然爲每個配置文件的數據庫循環訪問,但它可能不會像使用成員一樣多...

回答

2

有了內置的配置文件,沒有沒有更好的方法。 Tim提供的一個選項是Table Profile提供程序或編寫您自己的配置文件提供程序。

或者您也可以在您自己的自定義表格中完全執行其他路線,即storing profile information

+0

我聽說過提到過的桌面配置文件提供程序,但是我們的網站會很小,但這不是什麼大問題。我只是想知道是否有更好的方法來做到這一點..謝謝。 – yougotiger 2011-03-25 18:19:42

0

你可能可以用linq做的更好,我現在沒有VS,但僞代碼看起來像這樣:

var users = from MembershipUser user in Membership.GetAllUsers() 
    where user.mysetting == desiredValue 
    select user 

然後遍歷用戶,

foreach(MembershipUser u in users) { 
// do something 
} 

它應該只包含感興趣的。 Linq應該正確處理爲你執行的SQL,但是你可以檢查它是如何處理profiler的。


編輯

其實這可能不會讓你從性能的角度來看的話,就是GetAllUsers是要帶回的一切。您可能需要爲users表創建一個linq2sql dbml映射,並使用它來代替Membership類來查詢自定義屬性。


EDIT 2

ASP.NET Roles and Profiles: best way to query for collection of users who match custom profile property?

如果你使用你可以使用LINQ查詢對這個表的表概況提供者: http://weblogs.asp.net/kencox/archive/2010/09/05/using-the-sql-table-profile-provider-in-asp-net-4-web-applications-c-amp-vb.aspx

+0

我想我有點困惑,MembershipUser對象不會包含配置文件中的任何內容,所以通過Linq提取它並不能提供配置文件信息。 – yougotiger 2011-03-25 18:21:21

+0

這就是爲什麼我在編輯2中提到表格配置文件的原因,您會想要針對該問題編寫linq查詢。 – BlackICE 2011-03-25 18:44:21

相關問題