LINQ返回一组结果
本文关键字:一组 结果 返回 LINQ | 更新日期: 2023-09-27 18:06:44
我有一些代码设置用户的属性,像这样:
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";
}
}
它工作,但我不认为这是正确的方式。我如何分配userROB, ID和活动属性都在一个LINQ调用?不需要3个独立的函数来做这个?
如果我理解正确的话,我相信你可以这样做:
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作为一个参数,在任何情况下,你已经有其他属性已经从其他方法填充。
您可以创建一个接受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
}
}
你可能会考虑规范化你的领域模型,并有一个User
属性类型为User
,那么你的方法将返回所有相关的用户数据。