public TcpDbContext AddToContext(TcpDbContext context, LlcTlliSessionStagingDocument entity, int count, int commitCount, bool recreateContext, string sqlconn)
 {
     context.Set<LlcTlliSessionStagingDocument>().Add(entity);
     return AddToContextCon(context, count, commitCount, recreateContext, sqlconn);
 }
        public void CreateTable(string direction, IEnumerable<Gb_LLC_ReTransmission> gb_llc_retrans, int filenum)
        {
            //int packet_cnt = gb_llc_retrans.Select(e => e.BeginFrameNum).Distinct().Count();
            int? packet_cnt = gb_llc_retrans.Max(e => e.BeginFrameNum);

            int step = (int)packet_cnt / size + 1;

            for (int i = 0; i < step; i++)
            {
                var tlli_session = gb_llc_retrans.Where(e => e.BeginFrameNum >= i * size && e.BeginFrameNum < (i + 1) * size);

                var tlli_sessions = tlli_session.ToLookup(e => e.BeginFrameNum);

                //tcp的会话过程
                foreach (var m in tlli_sessions)
                {
                    #region 会话过滤,filter
                    var gb_packet = m.Where(e => e.bssgp_direction == direction);
                    var pd_llc = gb_packet.Where(e => e.llcgprs_nu != null);//不包含nu编号的包
                    if (pd_llc.Count() == 0) continue;
                    #endregion

                    LlcTlliSessionStagingDocument llcs = new LlcTlliSessionStagingDocument();

                    #region tcp会话的基础信息,callid/imsi/lac/cell/bvci/duration/
                    llcs._id = GenerateId();
                    llcs.session_id = filenum.ToString() + "-" + m.Key.Value.ToString();
                    llcs.direction = direction;
                    llcs.imsi = m.Where(e => e.bssgp_imsi != null).Select(e => e.bssgp_imsi).FirstOrDefault();
                    var src = m.Select(e => e.ip_src_host);
                    var dst = m.Select(e => e.ip_dst_host);
                    var bscip = src.Union(dst);
                    llcs.mscbsc_ip_aggre = string.Join(",", bscip.Distinct());
                    llcs.mscbsc_ip_count = bscip.Distinct().Count();
                    //还需要1个?留意ip的问题?
                    llcs.bsc_bvci = m.Where(e => e.nsip_bvci != null).Select(e => Convert.ToString(e.nsip_bvci)).Distinct().Aggregate((a, b) => a + "," + b);
                    llcs.lac_ci = m.Where(e => e.bssgp_lac != null).Count() == 0 ? "" : m.Where(e => e.bssgp_lac != null).Select(e => Convert.ToString(e.bssgp_lac) + "-" + Convert.ToString(e.bssgp_ci)).Distinct().Aggregate((a, b) => a + "," + b);
                    //下行时延,包含3次握手,取这次会话的总长度吧。
                    TimeSpan? ts = m.Max(e => DateTime.Parse(e.LLC_time)) - pd_llc.Min(e => DateTime.Parse(e.LLC_time));
                    llcs.duration = ts.Value.TotalMilliseconds;
                    #endregion

                    #region 计算llc是否连续及llc_nu的数量
                    var nu = pd_llc.OrderBy(e => e.FileNum).ThenBy(e => e.PacketNum).Select(e => e.llcgprs_nu);
                    llcs.llc_nu_count = nu.Count();
                    llcs.llc_nu_aggre = nu.Select(e => Convert.ToString(e)).Aggregate((a, b) => a + "," + b);
                    Int16 continu = 0;
                    for (int j = 0; j < nu.Count() - 2; j++)
                    {
                        if (nu.ElementAt(j + 1) - nu.ElementAt(j) != 1)
                            if (nu.ElementAt(j + 1) - nu.ElementAt(j) != 0 - 511)
                            {
                                continu = 1; break;
                            }
                    }
                    llcs.llc_nu_discard = continu;
                    #endregion
                    llcs.msg_aggre = pd_llc.Select(e => e.LLC_MsgType).Distinct().Aggregate((a, b) => a + "," + b);
                    llcs.msg_distinct_count = pd_llc.Select(e => e.LLC_MsgType).Distinct().Count();
                    mongo_LlcTlliSessionStaging.MongoCol.Insert(llcs);
                }
            }

            string mess = string.Format("OK...direction...{0}...size:{1}...step:{2}...cnt:{3}",
                direction, size, step, packet_cnt);
            Console.WriteLine(mess);
        }