c# - 将用户详细信息存储在字典中

标签 c# asp.net linq

用户登录。用户可以属于许多不同的 ServiceAreas 我正在尝试将用户的详细信息存储在包含用户所有信息的 Session 中。当 foreach 尝试添加相同的 key 时,它不断循环并出错。这是我的第一个错误。

Q1。我将如何阻止这种情况发生。

Q2。我能否将用户详细信息存储在 Session 中,无论他们属于 4 个 serviceAreas 还是 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;

用户类

class UserClass
{
    public string UserName { get; set; }
    public Dictionary<int, string> ServiceArea = new Dictionary<int, string>();
}

我需要做一个 if item. Q1 的东西

最佳答案

您需要独一无二的 key !

您不能将服务区域 ID 用作键,因为它不是唯一的

"The user can belong to many different ServiceAreas"

如何在 UserClass 中创建以下内容:

class UserClass
{
    public string UserName { get; set; }
    public Dictionary<int, ServiceArea> ServiceAreaDictionary = new Dictionary<int, ServiceArea>();
}

创建一个名为 ServiceArea 的新类来存储有关服务区域的信息。

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 以找出您想要的用户信息。 (即他们是多少个区域的成员等)

关于c# - 将用户详细信息存储在字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272960/

相关文章:

c# - 无法使用 c# System.Data.SqlClient 连接到本地数据库

c# - 正则表达式 - 仅匹配包含任何字母字符的字符串

c# - 将项目添加到 Winforms 中 ListView 的特定列

c# - 使用 LINQ(第 2 部分)选择单个列表的所有唯一组合,不重复

c# - 接口(interface)实现者对象的命名约定

asp.net - 如何使用引导警报在 asp.net 网页上显示任何操作状态?

javascript - 检测 Excel 对话框何时出现并发出 javascript 命令

c# - 将代码从 .aspx 文件移动到 .cs 文件,没有任何区别

c# - 按子句分组与 Distinct()

c# - 在 LINQ 中将字符串转换为 DateTime