在Dictionary中存储用户详细信息
本文关键字:用户 详细信息 存储 Dictionary | 更新日期: 2023-09-27 18:03:00
用户登录。用户可以属于许多不同的ServiceAreas,我正在尝试将用户的详细信息存储在包含用户所有信息的Session
中。当foreach
试图添加相同的key
时,它会继续旋转并出现错误。这是我的第一个错误。
Q1。我怎样才能阻止这一切的发生呢?
Q2。我是否能够在Session
中存储用户详细信息,无论他们属于4个服务区域还是1个服务区域?
var user = (from u in db.tbl_UserServiceAreaDetails
where u.tbl_User.UserName.Equals(txt_LoginName.Text)
&& u.tbl_User.Password.Equals(txt_Password.Text)
select u).FirstOrDefault();
if (user != null)
{
var serviceAreaID = user.serviceAreaID;
var serviceArea = user.tbl_ServiceArea.ServiceArea;
UserClass userDetails = new UserClass();
userDetails.UserName = user.tbl_User.UserName;
foreach (var item in serviceArea)
{
userDetails.ServiceArea.Add(serviceAreaID, serviceArea);
}
Session["User"] = userDetails;
UserClass
class UserClass
{
public string UserName { get; set; }
public Dictionary<int, string> ServiceArea = new Dictionary<int, string>();
}
我需要为Q1做if item. Something
吗?
您需要您的密钥唯一!
不能使用服务区域ID作为键,因为它不是唯一的
"用户可以属于多个不同的ServiceAreas"
如何在UserClass
中创建以下内容:
class UserClass
{
public string UserName { get; set; }
public Dictionary<int, ServiceArea> ServiceAreaDictionary = new Dictionary<int, ServiceArea>();
}
创建一个名为ServiceArea的新类来存储关于Service Areas的信息。
class ServiceArea
{
public int ServiceAreaID { get; set; }
public string ServiceAreaName { get; set; }
public ServiceArea(int id, string name) {
ServiceAreaID = id;
ServiceAreaName = name
}
}
然后……
var user = (from u in db.tbl_UserServiceAreaDetails
where u.tbl_User.UserName.Equals(txt_LoginName.Text)
&& u.tbl_User.Password.Equals(txt_Password.Text)
select u).FirstOrDefault();
if (user != null)
{
var serviceAreaID = user.serviceAreaID;
var serviceArea = user.tbl_ServiceArea.ServiceArea;
UserClass userDetails = new UserClass();
userDetails.UserName = user.tbl_User.UserName;
foreach (var item in serviceArea)
{
userDetails.ServiceAreaDictionary.Add([SOME UNIQUE KEY HERE], new ServiceArea(serviceAreaID, serviceArea));
}
Session["User"] = userDetails;
我希望这能解决你的问题,或者给你一个下一步的想法。
这个方法应该允许您检查ServiceAreaDictionary
以找出您想要的关于用户的信息。
我想你的意思是它的服务区域,错误正在生成?
如果是这种情况,很容易修复,因为你只有4个服务区域。
首先在ENUMERATION中定义您的服务区域
Public Enum ServiceAreasEnum As Integer
AreaN = 1 ' north
AreaE = 2 ' East
AreaS = 4 ' South
AreaW = 8 ' West
End Enum
现在,当用户能够服务多个区域时,您只需添加值,因此服务北部和东部的用户将总计为3,并使用该规则。您可以填写其他缺失的ENUM值
Public Enum ServiceAreasEnum As Integer
AreaN = 1 ' NORTH
AreaE = 2 ' EAST
AreaNE = 3 ' North East
AreaS = 4 ' SOUTH
AreaNS = 5 ' North South
AreaSE = 6 ' South East
AreaNES = 7 ' North East South
AreaW = 8 ' WEST
AreaNW = 9 ' North West
AreaEW = 10 ' East West
AreaNEW = 11 ' North East West
AreaW = 12 ' South West
AreaNSW = 13 ' North South West
AreaNSE = 14 ' North South East
ALLAreas = 15 ' North South West East
End Enum