Пример #1
0
        public StatResult GetStatResult()
        {
            StatResult result = new StatResult();

            StatDal       statDal       = new StatDal();
            MediaGuestDal mediaGuestDal = new MediaGuestDal();

            var guestDishes = statDal.GetGuestDishes();

            if (guestDishes != null && guestDishes.Count > 0)
            {
                #region 最有缘的嘉宾
                List <GuestPair> pairs = new List <GuestPair>();
                var guests             = guestDishes.GroupBy(v => v.GuestId).ToList();
                for (int i = 0; i < guests.Count; i++)
                {
                    for (int j = i + 1; j < guests.Count; j++)
                    {
                        var count = (from t in (from a in guests[i] join b in guests[j] on a.ProductId equals b.ProductId select new { pid = a.ProductId }) group t by t.pid).Count();

                        pairs.Add(new GuestPair {
                            GuestId1 = guests[i].Key, GuestId2 = guests[j].Key, Count = count
                        });
                    }
                }
                if (pairs != null && pairs.Count > 0)
                {
                    var topPair = pairs.OrderByDescending(v => v.Count).First();

                    var mediaGuests = mediaGuestDal.GetGuests();
                    if (mediaGuests != null && mediaGuests.Count > 0)
                    {
                        result.GuestPair            = new Entity.GuestPair();
                        result.GuestPair.GuestName1 = mediaGuests.First(v => v.Id == topPair.GuestId1).RealName;
                        result.GuestPair.GuestName2 = mediaGuests.First(v => v.Id == topPair.GuestId2).RealName;
                        result.GuestPair.Count      = topPair.Count;
                        result.GuestPair.TotalCount = (float)guestDishes.GroupBy(v => v.ProductId).Count() / guests.Count;
                    }
                }
                #endregion

                #region 最受欢迎的十大菜品
                var        populars   = (from dishGroup in (from dish in guestDishes group dish by dish.ProductId) orderby dishGroup.Count() descending select new { Key = dishGroup.Key, Count = dishGroup.Count() }).Take(10).ToList();
                ProductDal productDal = new ProductDal();
                var        products   = productDal.GetProductsById(populars.Select(v => v.Key).ToList());
                if (products != null && products.Count > 0)
                {
                    result.DishList = new List <Dish>();
                    foreach (var item in populars)
                    {
                        var product = products.FirstOrDefault(v => v.ProductId == item.Key);
                        if (product != null)
                        {
                            var dish = new Dish();

                            dish.Name  = product.ProductName;
                            dish.Count = item.Count;

                            result.DishList.Add(dish);
                        }
                    }
                }

                #endregion
            }

            return(result);
        }
Пример #2
0
        public StatResult GetStatResult()
        {
            StatResult result = new StatResult();

            StatDal statDal = new StatDal();
            MediaGuestDal mediaGuestDal = new MediaGuestDal();

            var guestDishes = statDal.GetGuestDishes();

            if (guestDishes != null && guestDishes.Count > 0)
            {
                #region 最有缘的嘉宾
                List<GuestPair> pairs = new List<GuestPair>();
                var guests = guestDishes.GroupBy(v => v.GuestId).ToList();
                for (int i = 0; i < guests.Count; i++)
                {
                    for (int j = i + 1; j < guests.Count; j++)
                    {
                        var count = (from t in (from a in guests[i] join b in guests[j] on a.ProductId equals b.ProductId select new { pid = a.ProductId }) group t by t.pid).Count();

                        pairs.Add(new GuestPair { GuestId1 = guests[i].Key, GuestId2 = guests[j].Key, Count = count });
                    }
                }
                if (pairs != null && pairs.Count > 0)
                {
                    var topPair = pairs.OrderByDescending(v => v.Count).First();

                    var mediaGuests = mediaGuestDal.GetGuests();
                    if (mediaGuests != null && mediaGuests.Count > 0)
                    {
                        result.GuestPair = new Entity.GuestPair();
                        result.GuestPair.GuestName1 = mediaGuests.First(v => v.Id == topPair.GuestId1).RealName;
                        result.GuestPair.GuestName2 = mediaGuests.First(v => v.Id == topPair.GuestId2).RealName;
                        result.GuestPair.Count = topPair.Count;
                        result.GuestPair.TotalCount = (float)guestDishes.GroupBy(v => v.ProductId).Count() / guests.Count;
                    }
                }
                #endregion

                #region 最受欢迎的十大菜品
                var populars = (from dishGroup in (from dish in guestDishes group dish by dish.ProductId) orderby dishGroup.Count() descending select new { Key = dishGroup.Key, Count = dishGroup.Count() }).Take(10).ToList();
                ProductDal productDal = new ProductDal();
                var products = productDal.GetProductsById(populars.Select(v => v.Key).ToList());
                if (products != null && products.Count > 0)
                {
                    result.DishList = new List<Dish>();
                    foreach (var item in populars)
                    {
                        var product = products.FirstOrDefault(v => v.ProductId == item.Key);
                        if (product != null)
                        {
                            var dish = new Dish();

                            dish.Name = product.ProductName;
                            dish.Count = item.Count;

                            result.DishList.Add(dish);
                        }
                    }
                }

                #endregion
            }

            return result;
        }