在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吗?

在Dictionary中存储用户详细信息

您需要您的密钥唯一!

不能使用服务区域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