2

ユーザーがログインします。ユーザーは、ユーザーの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;

UserClass

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

if item. SomethingQ1は必要ですか?

4

2 に答える 2

1

ユニークな鍵が必要です!

サービス エリア ID は一意ではないため、キーとして使用できません

「ユーザーは多くの異なる 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て、ユーザーについて必要なものを見つけることができます。(つまり、メンバーであるエリアの数など)

于 2013-03-07T14:03:27.090 に答える
0

エラーが発生しているサービスエリアのことですか?

この場合、サービスエリアは4つしかないため、簡単に修正できます。

ENUMERATIONでサービスエリアをしっかりと定義します

Public Enum ServiceAreasEnum As Integer
  AreaN = 1 ' north
  AreaE = 2 ' East
  AreaS = 4 ' South
  AreaW = 8 ' West
End Enum

これで、ユーザーが複数のエリアにサービスを提供できる場合は、値を追加するだけで、NORTHとEASTにサービスを提供するユーザーは合計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
于 2013-03-07T14:16:49.663 に答える