Ejemplo n.º 1
0
        public void Scenario()
        {
            TestDbContext.Exec(context => {
                var dbSet = context.Bug179_Data;

                dbSet.AddRange(new[] {
                    new Bug179_DataItem {
                        ID = 1, Group = "A", Value = 1
                    },
                    new Bug179_DataItem {
                        ID = 2, Group = "A", Value = 3
                    },
                    new Bug179_DataItem {
                        ID = 3, Group = "A", Value = null
                    },
                    new Bug179_DataItem {
                        ID = 4, Group = "B", Value = 5
                    },
                    new Bug179_DataItem {
                        ID = 5, Group = "B", Value = null
                    },
                });

                context.SaveChanges();

                var loadResult = DataSourceLoader.Load(dbSet, new SampleLoadOptions {
                    Group = new[] {
                        new GroupingInfo {
                            Selector = "Group", IsExpanded = false
                        }
                    },
                    GroupSummary = new[] {
                        new SummaryInfo {
                            SummaryType = "avg", Selector = "Value"
                        },
                        new SummaryInfo {
                            SummaryType = "count"
                        },
                        new SummaryInfo {
                            SummaryType = "sum", Selector = "Value"
                        }
                    },
                    TotalSummary = new[] {
                        new SummaryInfo {
                            SummaryType = "sum", Selector = "Value"
                        },
                        new SummaryInfo {
                            SummaryType = "count"
                        },
                        new SummaryInfo {
                            SummaryType = "avg", Selector = "Value"
                        }
                    }
                });

                var loadResultGroups = loadResult.data.Cast <ResponseModel.Group>().ToArray();

                var referenceGroups = dbSet
                                      .GroupBy(i => i.Group)
                                      .OrderBy(g => g.Key)
                                      .Select(g => new {
                    Avg   = g.Average(i => i.Value),
                    Count = g.Count(),
                    Sum   = g.Sum(i => i.Value)
                })
                                      .ToArray();

                for (var g = 0; g < 2; g++)
                {
                    Assert.Equal((decimal)referenceGroups[g].Avg, loadResultGroups[g].summary[0]);
                    Assert.Equal(referenceGroups[g].Count, loadResultGroups[g].summary[1]);
                    Assert.Equal((decimal)referenceGroups[g].Sum, loadResultGroups[g].summary[2]);
                }

                Assert.Equal((decimal)dbSet.Sum(i => i.Value), loadResult.summary[0]);
                Assert.Equal(dbSet.Count(), loadResult.summary[1]);
                Assert.Equal((decimal)dbSet.Average(i => i.Value), loadResult.summary[2]);
            });
        }
        public void Scenario()
        {
            TestDbContext.Exec(context => {
                var dbSet = context.Bug_FindInList_ItemA;

                dbSet.AddRange(new[] {
                    new Bug_FindInList_DataItemA {
                        ID    = 1, Date = DateTime.Now, Text = "qqqq1",
                        Items = new List <Bug_FindInList_DataItemB> {
                            new Bug_FindInList_DataItemB {
                                Id = 1, Name = "b_0011"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 2, Name = "b_0012"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 3, Name = "b_0013"
                            }
                        }
                    },
                    new Bug_FindInList_DataItemA {
                        ID    = 2, Date = DateTime.Now, Text = "qqqq2",
                        Items = new List <Bug_FindInList_DataItemB> {
                            new Bug_FindInList_DataItemB {
                                Id = 21, Name = "b_0021"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 22, Name = "b_0022"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 23, Name = "b_0023"
                            }
                        }
                    },
                    new Bug_FindInList_DataItemA {
                        ID    = 3, Date = DateTime.Now, Text = "qqqq3",
                        Items = new List <Bug_FindInList_DataItemB> {
                            new Bug_FindInList_DataItemB {
                                Id = 31, Name = "b_0031"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 32, Name = "b_0032"
                            },
                            new Bug_FindInList_DataItemB {
                                Id = 33, Name = "b_0033"
                            }
                        }
                    }
                });

                context.SaveChanges();

                // we implement "any" operator for search in collections
                var filter = new List <object> {
                    "Items", "any", new List <object> {
                        "Id", ">", "1"
                    }
                };
                var loadResult = DataSourceLoader.Load(dbSet, new SampleLoadOptions {
                    Filter = filter
                });

                /*// 2nd variant: by prepare expression
                 *  var queryableData = objectSpace.GetObjectsQuery<ServiceDeskRequest>();
                 *  var parameter = Expression.Parameter(typeof(ServiceDeskRequest), "A");
                 *  var expression = GetNavigationPropertyExpression(parameter, someUserOid, "Group", "Individuals", "Oid");
                 *  var whereCallExpression = Expression.Call(
                 *      typeof(Queryable), "Where", new Type[] { queryableData.ElementType }, queryableData.Expression, expression);
                 *  var results = queryableData.Provider.CreateQuery<ServiceDeskRequest>(whereCallExpression).Take(10);
                 *  foreach (ServiceDeskRequest item in results)
                 *      Console.WriteLine(item);*/

                var data      = (IEnumerable <Bug_FindInList_DataItemA>)loadResult.data;
                var dataCount = data.Count();
                Assert.Equal(2, dataCount);
            });
        }