如何使用表条件显示新的未读消息

时间:2014-05-26 14:24:40

标签: linq linq-to-sql asp.net-4.0 linq-expressions

我只想加载一个创建多个票证的新消息列表,然后再将它们绑定到单个转发器控件。

这里我把我的表架构用于一般的想法:

enter image description here 对于消息绑定,我使用此代码:

private void BindMessageRepeater()
    {
        DataSet myDataSet = new DataSet();
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("Ref_no", typeof(string)));
        dt.Columns.Add(new DataColumn("Name", typeof(string)));
        dt.Columns.Add(new DataColumn("UserId", typeof(string)));
        dt.Columns.Add(new DataColumn("Message", typeof(string)));
        dt.Columns.Add(new DataColumn("CreatedDate", typeof(DateTime)));
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            if (db.Enquiries.Where(i => i.ForwardTo.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault()) || i.AttendBy.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).Count() > 0)
            {
                foreach (var enquiry in db.Enquiries.Where(i => i.ForwardTo.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault()) || i.AttendBy.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).ToList())
                {
                    if (enquiry != null)
                    {
                        if (db.Messages.Where(m => m.Enquiry_History_id.Equals(enquiry.Ref_no) && m.User_id.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).Count() > 0)
                        {
                            foreach (var message in db.Messages.Where(m => m.Enquiry_History_id.Equals(enquiry.Ref_no) && m.User_id.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).ToList())
                            {
                                bool IsIns = true;
                                if (message != null)
                                {
                                    if (db.MessageFlags.Where(f => f.MessageId.Equals(message.Id) && f.UserId.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).Count() > 0)
                                    {
                                        foreach (var flag in db.MessageFlags.Where(f => f.MessageId.Equals(message.Id) && !f.UserId.Equals(db.Users.Where(u => u.Username.Equals((String)Session["Username"])).Select(u => u.Ref_no).SingleOrDefault())).Select(f => new { IsRead = f.IsRead }).ToList())
                                        {
                                            if (flag.IsRead == true)
                                            {
                                                IsIns = false;
                                            }
                                        }
                                    }
                                }
                                if (IsIns == true)
                                {
                                    DataRow dr = dt.NewRow();
                                    dr["Ref_no"] = enquiry.Ref_no.ToString();
                                    dr["Name"] = db.Users.Where(u => u.Ref_no.Equals(message.User_id)).Select(u => u.FirstName + ' ' + u.LastName).SingleOrDefault().ToString();
                                    dr["UserId"] = db.Users.Where(u => u.Ref_no.Equals(message.User_id)).Select(u => u.Ref_no).SingleOrDefault().ToString();
                                    dr["Message"] = message.body.ToString();
                                    dr["CreatedDate"] = message.Created_date;
                                    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();
        }
    }

这里我详细解释了我的问题:

假设,任何用户/员工提高机票/查询并转发给其他员工,其他员工可以回答。在这里我制作一个公共消息表,所有消息都存储在一个表中。在这里我只需要制作更像enquiry_status的表进行检查,工作人员会删除此票据或回复它。

现在我只想计算新的回复,并检查每个查询没有IsDisplay为false 之后检查它是否设置为false然后检查每条消息并确认检查这是否从特定用户ID读取。

我从我的代码中尝试最好的方式我出错了。

----------------------------更新--------------- ---------------

好吧,简单来说:

我正在使用此查询:

using (DataClassesDataContext db = new DataClassesDataContext())
        {
           string userid = db.Users.Where(u=>u.Username.Equals((String)Session["Username"])).Select(u=>u.Ref_no).SingleOrDefault();
           var query = from e in db.Enquiries.Where(i=>i.AttendBy.Equals(userid) || i.ForwardTo.Equals(userid)).ToList()
                       join f in db.Flags on e.Ref_no equals f.Enquiry_History_id into joined
                       from f in joined.DefaultIfEmpty()
                       select new 
                       {
                          Ref_no = e.Ref_no,
                          IsDisplay = f.IsDisplay
                       };
            bool IsIns = true;
            foreach(var item in query)
            {
                if(item!=null)
                {
                    if (item.IsDisplay == false)
                    {
                        IsIns = false;
                    }
                }
                if (IsIns == true)
                {
                    var query1 = from m in db.Messages.Where(m => m.Enquiry_History_id.Equals(item.Ref_no)).ToList()
                                 join f in db.MessageFlags on m.Id equals f.MessageId into joined
                                 from f in joined.DefaultIfEmpty()
                                 select new
                                 {
                                     IsRead = f.IsRead,
                                     User_id = m.User_id,
                                     Message = m.body,
                                     CreatedDate = m.Created_date
                                 };
                    bool IsIns1 = true;
                    foreach (var item1 in query1.Where(f=>!f.User_id.Equals(userid)))
                    {
                        if (item1 != null)
                        {
                            if (item1.IsRead == true)
                            {
                                IsIns1 = false;
                            }
                        }
                        if (IsIns1 == true)
                        {
                            DataRow dr = dt.NewRow();
                            dr["Ref_no"] = item.Ref_no.ToString();
                            dr["Name"] = db.Users.Where(u => u.Ref_no.Equals(item1.User_id)).Select(u => u.FirstName + ' ' + u.LastName).SingleOrDefault().ToString();
                            dr["UserId"] = db.Users.Where(u => u.Ref_no.Equals(item1.User_id)).Select(u => u.Ref_no).SingleOrDefault().ToString();
                            dr["Message"] = item1.Message.ToString();
                            dr["CreatedDate"] = item1.CreatedDate;
                            dt.Rows.Add(dr);
                        }
                    }
                }
            }

0 个答案:

没有答案