簡體   English   中英

LINQ返回一組結果

[英]LINQ Returning a set of results

我有一些代碼可以像這樣設置用戶的屬性:

us = new UserSession();
us.EmailAddr = emailAddr;
us.FullName = fullName;
us.UserROB = GetUserROB(uprUserName);
us.UserID = GetUserID(uprUserName);
us.UserActive = GetUserActive(uprUserName);

其中GetUserROBGetUserIDGetUserActive都看起來像這樣:

private static string GetUserActive(string userName)
{
    using (Entities ctx = CommonSERT.GetContext())
    {
        var result = (from ur in ctx.datUserRoles
                       where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                       select new
                       {
                           Active = ur.active
                       }).FirstOrDefault();

        if (result != null)
           return result.Active;
        else
           return "N";
     }
  }

它有效,但是我不認為這是正確的方法。 如何在一個LINQ調用中全部分配userROB,ID和Active屬性? 不必具有3個單獨的功能來執行此操作?

您可以創建一個接受UserSession對象作為參數的方法,然后在其中設置所有三個屬性。 我在這里更改了您的GetUserActive

private static void GetUserData(string userName, UserSession user)
    {
        using (Entities ctx = CommonSERT.GetContext())
        {
            var result = (from ur in ctx.datUserRoles
                          where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                          select new
                          {
                              Active = ur.active,
                              ID = ur.ID,
                              //...select all properties from the DB
                          }).FirstOrDefault();

            if (result != null)
                user.UserActive = result.Active;
                user.UserID = result.ID;
                //..set all properties of "user" object
        }
    }

如果我理解正確,我相信您可以執行以下操作:

private static void GetUserData(string userName, UserSession userSession)
{
    using (Entities ctx = CommonSERT.GetContext())
    {
        var result = (from ur in ctx.datUserRoles
                      where ur.AccountName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)
                      select new
                      {
                          UserActive = ur.active,
                          UserROB = ur.ROB,
                          UserID = ur.ID
                      }).FirstOrDefault();


    }

    if (result != null) {
        userSession.UserActive = result.UserActive;
        userSession.UserROB  = result.UserROB;
        userSession.UserID = result.UserID;
    }

}

在“ select new您可以根據需要放置任意多個屬性,這樣,您可以在一次往返中從數據庫中獲取多個屬性,並在以后進行處理。

在我給出的示例中,我將UserSession作為參數傳遞,無論如何,您已經通過其他方法充實了其他屬性。

好吧,您可能會考慮規范化您的域模型並具有類型為UserUser屬性,那么您的方法將返回所有相關的用戶數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM