public void GroupingAddedToSorting() { var loadOptions = new SampleLoadOptions { Sort = new[] { new SortingInfo { Selector = "Item2" }, new SortingInfo { Selector = "Item3" } }, Group = new[] { new GroupingInfo { Selector = "Item1" }, new GroupingInfo { Selector = "Item2", Desc = true } // this must win } }; var builder = new DataSourceExpressionBuilder <Tuple <int, int, int> >(loadOptions); Assert.Equal( "data.OrderBy(obj => obj.Item1).ThenByDescending(obj => obj.Item2).ThenBy(obj => obj.Item3)", builder.BuildLoadExpr().ToString() ); loadOptions.Sort = null; Assert.Contains("OrderBy", builder.BuildLoadExpr().ToString()); }
public void DefaultSortAndPrimaryKey() { var options = new SampleLoadOptions { PrimaryKey = new[] { "Item1" }, DefaultSort = "Item1", Sort = new[] { new SortingInfo { Selector = "Item1" } } }; var builder = new DataSourceExpressionBuilder <Tuple <int, int, int> >(options, false); Assert.Equal( "data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr().Body.ToString() ); options.DefaultSort = "Item2"; options.Sort[0].Selector = "Item3"; Assert.Equal( "data.OrderBy(obj => obj.Item3).ThenBy(obj => obj.Item2).ThenBy(obj => obj.Item1)", builder.BuildLoadExpr().Body.ToString() ); }
public void Build_FilterAsEmptyList() { // To mitigate cases like https://devexpress.com/issue=T483154 var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions { Filter = new object[0] }); Assert.DoesNotContain(".Where", builder.BuildLoadExpr().ToString()); }
public void Build_Filter() { var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions { Filter = new object[] { "this", ">", 123 } }); var expr = builder.BuildLoadExpr(); Assert.Equal("data.Where(obj => (obj > 123))", expr.ToString()); }
public void Build_SkipTake() { var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions { Skip = 111, Take = 222 }); var expr = builder.BuildLoadExpr(); Assert.Equal("data.Skip(111).Take(222)", expr.ToString()); }
public void DefaultSort() { var options = new SampleLoadOptions { DefaultSort = "Item1" }; var builder = new DataSourceExpressionBuilder <Tuple <int, int> >(options, false); Assert.Equal("data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString()); options.Sort = new[] { new SortingInfo { Selector = "Item2" } }; Assert.Equal("data.OrderBy(obj => obj.Item2).ThenBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString()); options.Sort[0].Selector = "Item1"; Assert.Equal("data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr(false).ToString()); }
public void AlwaysOrderDataByPrimaryKey() { var options = new SampleLoadOptions { PrimaryKey = new[] { "Item2", "Item1" } }; var builder = new DataSourceExpressionBuilder <Tuple <int, int> >(options, false); Assert.Equal( "data.OrderBy(obj => obj.Item2).ThenBy(obj => obj.Item1)", builder.BuildLoadExpr().Body.ToString() ); }
public void MultiIntervalGroupsSortedOnce() { var builder = new DataSourceExpressionBuilder <int>(new SampleLoadOptions { Group = new[] { new GroupingInfo { Selector = "this", GroupInterval = "a" }, new GroupingInfo { Selector = "this", GroupInterval = "b" } } }); Assert.Equal("data.OrderBy(obj => obj)", builder.BuildLoadExpr().ToString()); }
public void Build_Sorting() { var builder = new DataSourceExpressionBuilder <Tuple <int, string> >(new SampleLoadOptions { Sort = new[] { new SortingInfo { Selector = "Item1" }, new SortingInfo { Selector = "Item2", Desc = true } } }); var expr = builder.BuildLoadExpr(); Assert.Equal("data.OrderBy(obj => obj.Item1).ThenByDescending(obj => obj.Item2)", expr.ToString()); }
public void PR202() { // https://github.com/DevExpress/DevExtreme.AspNet.Data/pull/202 var options = new SampleLoadOptions { DefaultSort = "item1", Sort = new[] { new SortingInfo { Selector = "ITEM1" } } }; var builder = new DataSourceExpressionBuilder <Tuple <int> >(options, false); Assert.Equal( "data.OrderBy(obj => obj.Item1)", builder.BuildLoadExpr().ToString() ); }
public void GuardNulls() { var builder = new DataSourceExpressionBuilder <Tuple <int?, string, DateTime?> >(new SampleLoadOptions { Filter = new[] { new[] { "Item1", ">", "0" }, new[] { "Item2", "contains", "z" }, new[] { "Item2.Length", ">", "1" }, new[] { "Item3.Year", ">", "0" } }, Sort = new[] { new SortingInfo { Selector = "Item1" }, new SortingInfo { Selector = "Item2.Length" }, new SortingInfo { Selector = "Item3.Year" }, } }, true); var data = new[] { // filtered out null, Tuple.Create <int?, string, DateTime?>(null, "zz", new DateTime(2000, 1, 1)), Tuple.Create <int?, string, DateTime?>(1, null, new DateTime(2000, 1, 1)), Tuple.Create <int?, string, DateTime?>(1, "zz", null), // kept Tuple.Create <int?, string, DateTime?>(1, "zz", new DateTime(2000, 1, 2)), Tuple.Create <int?, string, DateTime?>(1, "zz", new DateTime(2000, 1, 1)) }.AsQueryable(); var expr = builder.BuildLoadExpr(data.Expression); var result = data.Provider.CreateQuery <object>(expr).ToArray(); Assert.Equal(2, result.Length); }
public static Expression BuildLoadExpr <T>(this DataSourceExpressionBuilder <T> builder) => builder.BuildLoadExpr(true);
public static Expression BuildLoadExpr <T>(this DataSourceExpressionBuilder <T> builder, bool paginate = true) { return(builder.BuildLoadExpr(CreateSourceExpr <T>(), paginate)); }