public GenericDataModel GetItemBasedDataModel()
        {
            FastByIDMap <IPreferenceArray> data = new FastByIDMap <IPreferenceArray>();

            IEnumerable <UserBookReview> allBookReviews = _userBookReviewRepository.GetListOf();

            var everyReviewsBookId = allBookReviews.GroupBy(b => b.BookId).Select(x => x.Key).ToList();


            foreach (int bookId in everyReviewsBookId)
            {
                List <UserBookReview> bookReviewsForABook = (from userReviews in allBookReviews
                                                             where userReviews.BookId == bookId
                                                             select userReviews).ToList();
                List <IPreference> listOfPreferences = new List <IPreference>();

                foreach (UserBookReview review in bookReviewsForABook)
                {
                    int rating             = review.Rating;
                    int reviewUserId       = review.UserId;
                    GenericPreference pref = new GenericPreference(reviewUserId, bookId, rating); /// userId,  itemid, valueId

                    listOfPreferences.Add(pref);
                }

                GenericItemPreferenceArray dataArray = new GenericItemPreferenceArray(listOfPreferences);
                data.Put(bookId, dataArray);
            }

            return(new GenericDataModel(data));
        }
        public void testStrategy()
        {
            FastIDSet itemIDsFromUser123 = new FastIDSet();

            itemIDsFromUser123.Add(1L);

            FastIDSet itemIDsFromUser456 = new FastIDSet();

            itemIDsFromUser456.Add(1L);
            itemIDsFromUser456.Add(2L);

            List <IPreference> prefs = new List <IPreference>();

            prefs.Add(new GenericPreference(123L, 1L, 1.0f));
            prefs.Add(new GenericPreference(456L, 1L, 1.0f));
            IPreferenceArray preferencesForItem1 = new GenericItemPreferenceArray(prefs);

            var dataModelMock = new DynamicMock(typeof(IDataModel));

            dataModelMock.ExpectAndReturn("GetPreferencesForItem", preferencesForItem1, (1L));
            dataModelMock.ExpectAndReturn("GetItemIDsFromUser", itemIDsFromUser123, (123L));
            dataModelMock.ExpectAndReturn("GetItemIDsFromUser", itemIDsFromUser456, (456L));

            IPreferenceArray prefArrayOfUser123 =
                new GenericUserPreferenceArray(new List <IPreference>()
            {
                new GenericPreference(123L, 1L, 1.0f)
            });

            ICandidateItemsStrategy strategy = new PreferredItemsNeighborhoodCandidateItemsStrategy();

            //EasyMock.replay(dataModel);

            FastIDSet candidateItems = strategy.GetCandidateItems(123L, prefArrayOfUser123, (IDataModel)dataModelMock.MockInstance);

            Assert.AreEqual(1, candidateItems.Count());
            Assert.True(candidateItems.Contains(2L));

            dataModelMock.Verify(); //  EasyMock.verify(dataModel);
        }