2014-05-22 1 views
1

Je travaille avec l'application crm. je l'ai développé finalement je suis confus comment je détecte de nouveaux messages selon le drapeau doit avoir l'affichage et le message ne pas avoir vrai.comment obtenir compte nouveau message trouvé selon l'enquête/billet avec les conditions bi-directionnelles

Voici mon schéma db pour comprendre le problème.

enter image description here Voici ma requête construite pour obtenir un nouveau nombre de messages:

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(); 

ici, je dois prendre chaque enquête qui ont été AttendBy ou ForwardBy à l'utilisateur et vérifier d'abord il doit être l'affichage n'est pas faux et après cette vérification selon chaque message ne devrait pas avoir IsRead à vrai. J'essaie de mon mieux, mais cela ne me donne pas comme je veux.

Répondre

0

J'ai une idée il suffit d'insérer deux valeurs, une pour vrai qui génère un message et une seconde pour faux vers l'avant. et à trouver seulement ceux qui ont IsRead à false.

quelque chose comme ceci:

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(); 
     } 
Questions connexes