Linq 如何在双向条件下获得根据查询/票证发现的新信息

Linq 如何在双向条件下获得根据查询/票证发现的新信息,linq,linq-to-sql,asp.net-4.0,Linq,Linq To Sql,Asp.net 4.0,我正在使用crm应用程序。我最终开发了它,我很困惑我是如何根据标志必须显示和消息不必须为真来检测新消息的 这是我的db模式,用于理解这个问题 以下是我构造的查询,用于获取新邮件计数: int new_messages = 0; foreach (var enquiry in db.Enquiries.Where(i => (i.ForwardTo.Equals(userid) || i.AttendBy.Equals(userid))).ToList())

我正在使用crm应用程序。我最终开发了它,我很困惑我是如何根据标志必须显示和消息不必须为真来检测新消息的

这是我的db模式,用于理解这个问题

以下是我构造的查询,用于获取新邮件计数:

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

在这里,我必须采取的每一个查询已经注意到或转发给用户,并检查它首先应该是显示是不是假的,然后根据每个消息检查不应该有读为真。我正在尝试我最好的方法,但这并没有给我想要的结果。

我有一个想法,只需插入两个值,一个为true,生成消息,另一个为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();
        }