2017-08-16 28 views
2

我正在嘗試創建一個登錄頁面。當我嘗試用linq接收用戶數據時,我得到一個異常,因爲我嘗試在查詢中使用Parse。我在網上搜索了一下,發現這是因爲Linq不認識Parse。根據我的理解,我必須將不可識別的代碼翻譯成linq/slq可識別的代碼。由於我剛剛開始使用linq查詢,我不知道如何完成此操作。Linq不被識別在查詢中解析

我的查詢:

public static UserDetails GetUser(UserDetails userde) 
    { 
     var usr = from u in db.Users 
        join r in db.Roles on u.RoleId equals r.IdRole 
        where u.Email == userde.Email && u.Active == true 

        select new UserDetails 
          { Firstname = u.Firstname, 
           Surname = u.Surname, 
           Email = u.Email, 
           Function = u.Function, 
           Password = u.Password, 
           Salt = u.Salt, 
           Userroles = (UserRoles)Enum.Parse(typeof(UserRoles), r.Role1) 
          }; 

     return usr.FirstOrDefault(); 
    } 

我查了一下這些文章:

回答

4

你應該先用FirstOrDefault()後來解析它。否則linq仍然試圖構建select語句。在FirstOrDefault(或ToList,...)之後,您將得到結果,然後可以毫無問題地解析它。

應該是這樣的:

public static UserDetails GetUser(UserDetails userde) 
{ 
    var usr = from u in db.Users 
       join r in db.Roles on u.RoleId equals r.IdRole 
       where u.Email == userde.Email && u.Active == true 

       select new UserDetails { Firstname = u.Firstname, 
        Surname = u.Surname, 
        Email = u.Email, 
        Function = u.Function, 
        Password = u.Password, 
        Salt = u.Salt, 

        // store the database-value in another property 
        UserrolesUnparsed = r.Role1 
        }; 

    // get the database-results 
    UserDetails details = usr.FirstOrDefault(); 

    // parse the database-value and set it to the property you want to 
    details.Userroles = (UserRoles)Enum.Parse(typeof(UserRoles), details.UserrolesUnparsed); 

    return details; 

} 

肯定的是,有更好/更清潔的方法,但是這只是說明你。

+0

我試圖做到這一點 VAR USR1 = db.Users.Where(U => usr.FirstOrDefault()==電子郵件u.Email).FirstOrDefault(); (UserRoles)Enum.Parse(typeof(UserRoles),usr1.Role.Role1); 但由於某種原因,即使它只是一個普通用戶,我的usrroles總是堅持管理員。將嘗試做你所說的 –

+0

你的代碼工作!非常感謝你 –