2012-02-16 41 views
0

我需要的GetUsers一個計數,但我有3個不同的計算無論是α,搜索和byEmail參數我能在這種情況下我的ObjectDataSource SelectCount方法SelectCount由三個選項的ObjectDataSource

public class Users 
{ 
    public IList<MembershipUser> GetUsers(string alpha, string search, bool byEmail, int startRowIndex, int maximumRows) 
    { 
     IList<MembershipUser> users = null; 

     if (alpha != null && search == null) 
     { 
      users = Membership.GetAllUsers().Cast<MembershipUser>().Where(x => x.UserName.StartsWith(alpha) == true).ToList(); 
     } 
     else if (search != null && !byEmail) 
     { 
      users = Membership.FindUsersByName(search).Cast<MembershipUser>().Skip(maximumRows * startRowIndex).Take(maximumRows).ToList(); 
     } 
     else 
     { 
      users = Membership.FindUsersByEmail(search).Cast<MembershipUser>().Skip(maximumRows * startRowIndex).Take(maximumRows).ToList(); 
     } 

     return users; 

    } 

    public int GetUserCount() 
    { 

    } 

更新了C#做:

public IEnumerable<MembershipUser> GetUsers(string alpha, string searchBy, string searchText, int startRowIndex, int maximumRows) 
    { 
     var users = Membership.GetAllUsers().Cast<MembershipUser>(); 

     if (alpha != null && string.IsNullOrEmpty(searchBy)) 
     { 
      users = users 
       .Where(x => x.UserName.StartsWith(alpha, StringComparison.OrdinalIgnoreCase)) 
       .Skip(maximumRows * startRowIndex) 
       .Take(maximumRows).ToList(); 
     } 
     else if (searchBy == "User Name" && !string.IsNullOrEmpty(searchText)) 
     { 
      users = users.Where(x => x.UserName == searchText) 
       .Skip(maximumRows * startRowIndex) 
       .Take(maximumRows).ToList(); 
     } 
     else if (searchBy == "Email" && !string.IsNullOrEmpty(searchText)) 
     { 
      users = users.Where(x => x.Email == searchText) 
       .Skip(maximumRows * startRowIndex) 
       .Take(maximumRows).ToList(); 
     } 
     else 
     { 
      users = null; 
     } 

     return users; 

    } 
+2

*修復這個問題*在這個社區通常是不好的話。我們可以幫助你解決你的問題,但是我們會爲你解決任何問題的期望是不好的。 – 2012-02-16 02:50:12

+1

@ M.Babcock對不起,我下次不會說,但我真正的問題是,當我需要做一個計數,我如何確定選擇哪個計數。 – ONYX 2012-02-16 02:51:49

+0

這聽起來像是一個商業規則,你應該問你的設計師。我們不知道您的數據,所以我們只能推測。 – 2012-02-16 02:55:06

回答

1

類似下面應該工作:

public int GetUserCount(string alpha, string search, bool byEmail, int startRowIndex, int maximumRows) 
{ 
    var users = Membership.GetAllUsers().Cast<MembershipUser>(); 

    if (alpha != null && search == null) 
    { 
     users = users.Where(x => x.UserName.StartsWith(alpha) == true); 
    } 
    else if (search != null && !byEmail) 
    { 
     users = users.FindUsersByName(search).Cast<MembershipUser>(); 
    } 
    else 
    { 
     users = users.FindUsersByEmail(search); 
    } 

    return users.Count(); 
} 

如果FindUsersByNameFindUsersByEmail返回與IEnumerable<T>相關的對象,那麼我會更加適應這種方法,因此您可以依賴LINQ的懶惰本質,但在這種情況下,因爲您正在進行計數,所以無關緊要。我建議使用某種形式的Select來限制被查詢的字段,但在你的後兩種情況下,他們會反正收到所有結果,因此2/3的可能情況沒有好處。如果您發現通常不是通過UserName完成查詢,那麼它可能值得在那裏添加。

+0

我已經更新了我的c#,我只是繼續,並將它變成IEnumerable 而不看你是答案。這是你的意思,你是評論。我沒有使用一個選擇我用了一個地方 – ONYX 2012-02-16 23:15:17

+0

通常,是的。在這種情況下使用'Select'的好處是減少從數據庫中返回的字段數量(這會使其效率略高一些)。我認爲它只會在第一個好處,儘管因爲'FindUsersByName'會返回你的整個對象。 – 2012-02-16 23:19:58

+0

我需要的唯一字段是用戶名,但當我需要待辦事項刪除它時,需要MembershipUser類對象,當我在我的ListView中爲我的LinkBut​​ton命令的DataItem對ItemDataBound執行命令時。我從來沒有做過一個Select()語句之前創建一個匿名對象你怎麼做,我可能會有它錯誤的匿名對象你可以給我一個例子在選擇語句更新代碼 – ONYX 2012-02-16 23:39:40