[英]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);
其中GetUserROB
, GetUserID
和GetUserActive
都看起來像這樣:
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作為參數傳遞,無論如何,您已經通過其他方法充實了其他屬性。
好吧,您可能會考慮規范化您的域模型並具有類型為User
的User
屬性,那么您的方法將返回所有相關的用戶數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.