2014-05-22 5 views
1

crm 응용 프로그램과 함께 작업하고 있습니다. 나는 마침내 그것을 개발했다. 깃발이 디스플레이와 메시지를 가져야 만 할 때 새로운 메시지를 어떻게 감지하는지 혼란 스러울 것이다.양방향 조건으로 조회/티켓 당 새 메시지 수를 계산하는 방법

여기에는 문제를 이해하기위한 내 db 스키마가 나와 있습니다. 여기

enter image description here

새로운 메시지 수를 얻기 위해 내 건설 쿼리입니다 :

여기 내가 사용자에게 AttendBy 또는 ForwardBy을왔다 각각의 질문을 가지고 처음은 표시해야 확인해야
int new_messages = 0; 
       foreach (var enquiry in db.Enquiries.Where(i => (i.ForwardTo.Equals(userid) || i.AttendBy.Equals(userid))).ToList()) 
       { 
        if (enquiry != null) 
        { 
         bool IsIns = true; 
         foreach (var flag in db.Flags.Where(f => f.Enquiry_History_id.Equals(enquiry.Ref_no) && f.User_id.Equals(userid)).Select(f => new { IsDisplay = f.IsDisplay }).ToList()) 
         { 
          if (flag != null) 
          { 
           if (flag.IsDisplay == false) 
           { 
            IsIns = false; 
           } 
          } 
         } 
         if (IsIns == true) 
         { 
          foreach (var message in db.Messages.Where(m => m.Enquiry_History_id.Equals(enquiry.Ref_no) && m.User_id.Equals(userid)).Select(m => new { IsRead = m.IsRead }).ToList()) 
          { 
           if (message.IsRead == true) 
           { 
            //do another stuff 
           } 
           else 
           { 
            new_messages++; 
           } 
          } 
         } 
        } 
       } 
       lbl_msg.Text = new_messages.ToString(); 

거짓없는 그 후 각 메시지마다 IsRead가 true가 아니어야합니다. 나는 최선의 방법으로 노력하고있다. 그러나 이것은 내가 원하는대로 나를 내놓지 않는다.

답변

0

나는 메시지를 생성하는 true 값과 froward 값 false 값을 삽입하기 만하면된다. 그리고 IsRead가 false 인 것을 발견 할 때. 이 방법으로 같은

뭔가 :

using (DataClassesDataContext db = new DataClassesDataContext()) 
     { 
      string userid = db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault().ToString(); 
      bool IsIns = true; 
      foreach (var enquiry in db.Enquiries.Where(i => i.AttendBy.Equals(userid) || i.ForwardTo.Equals(userid)).ToList()) 
      { 
       if (enquiry != null) 
       { 
        foreach (var flag in db.Flags.Where(f => f.Enquiry_History_id.Equals(enquiry.Ref_no) && f.User_id.Equals(userid)).Select(f => new { IsDisplay = f.IsDisplay }).ToList()) 
        { 
         if (flag.IsDisplay == false) 
         { 
          IsIns = false; 
         } 
         if (IsIns == true) 
         { 
          foreach (var message in db.Messages.Where(m => m.Enquiry_History_id.Equals(enquiry.Ref_no)).ToList()) 
          { 
           if (message != null) 
           { 
            bool IsIns1 = false; 
            foreach (var messageflag in db.MessageFlags.Where(mf => mf.MessageId.Equals(message.Id) && mf.UserId.Equals(userid)).Select(mf => new 
            { 
             IsRead = mf.IsRead, 
             User_id = mf.UserId, 
             Message = message.body, 
             CreatedDate = message.Created_date 
            }).ToList()) 
            { 
             if (messageflag.IsRead == false) 
             { 
              IsIns1 = true; 
             } 
             if (IsIns1 == true) 
             { 
              DataRow dr = dt.NewRow(); 
              dr["Ref_no"] = enquiry.Ref_no.ToString(); 
              dr["Name"] = db.Users.Where(u => u.Ref_no.Equals(messageflag.User_id)).Select(u => u.FirstName + ' ' + u.LastName).SingleOrDefault().ToString(); 
              dr["UserId"] = db.Users.Where(u => u.Ref_no.Equals(messageflag.User_id)).Select(u => u.Ref_no).SingleOrDefault().ToString(); 
              dr["Message"] = messageflag.Message.ToString(); 
              dr["CreatedDate"] = messageflag.CreatedDate.ToString(); 
              dt.Rows.Add(dr); 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
      myDataSet.Tables.Add(dt); 
      lbl_count_messages.Text = myDataSet.Tables[0].Rows.Count.ToString(); 
      if (myDataSet.Tables[0].Rows.Count == 0) 
      { 
       message_alert.Visible = false; 
      } 
      Repeater_Messages.DataSource = myDataSet; 
      Repeater_Messages.DataBind(); 
     }