public void AddProducts(List <Product> products) { try { SqlConn.Open(); using (SqlCommand sqlCommand = SqlConn.CreateCommand()) { sqlCommand.CommandType = CommandType.StoredProcedure; sqlCommand.CommandText = InsertProductsSp; DataTable productsDataTable = products.ToDataTable(p => new { p.Name, p.SupplierId, p.CategoryId, MeasureUnit = ColumnSettings.Build(() => p.MeasureUnit).Name("Quantity Per Unit"), UnitPrice = p.Price * 1.5m, p.UnitsInStock, p.UnitsOnOrder, p.ReorderLevel, p.Discontinued }); sqlCommand.Parameters.AddWithValue("@Products", productsDataTable); sqlCommand.ExecuteNonQuery(); } } finally { SqlConn.Close(); } }
public void Validate_SingleMemberProjectionWhereColumnSettingsDoNotHaveANameSet_ShouldThrowAnException() { Expression <Func <Place, dynamic> > projector = p => ColumnSettings.Build(() => "Hey"); var columnSettings = (ColumnSettings)Expression.Lambda(projector.Body).Compile().DynamicInvoke(); projector = projector.Update(Expression.Constant(columnSettings, typeof(ColumnSettings)), projector.Parameters); Action projectorValidation = () => new ColumnSettingsNameValidator().Validate(projector); Assert.Throws <InvalidOperationException>(projectorValidation); }
public void ToDataTable_ProjectionThatOnlyHasAColumnSettingsInIt_ShouldGenerateTheColumnWithNoIssue() { Expression <Func <Person, dynamic> > projector = p => new { DOB1 = ColumnSettings.Build(() => p.DateOfBirth).Name("DOB") }; DataColumnCollection columns = _people.ToDataTable(projector).Columns; DataColumnCollection expectedColumns = new DataTable().Columns; expectedColumns.AddRange(new DataColumn[] { new DataColumn() { ColumnName = "DOB", DataType = typeof(DateTime), AllowDBNull = false } } ); Assert.True(AreColumnsSetEquals(columns, expectedColumns)); }
public void ToDataTable_ProjectUsingColumnSettings_ShouldGenerateColumnBasedOnSettingsPassedInTheProjection() { Expression <Func <Person, dynamic> > projector = p => ColumnSettings.Build(() => p.FirstName + " " + p.LastName).Name("Full Name"); DataColumnCollection columns = _people.ToDataTable(projector).Columns; DataColumnCollection expectedColumns = new DataTable().Columns; expectedColumns.AddRange(new DataColumn[] { new DataColumn() { ColumnName = "Full Name", DataType = typeof(string), AllowDBNull = true } } ); Assert.True(AreColumnsSetEquals(columns, expectedColumns)); }
public void ToDataTable_ProjectionThatHasColumnSettingsInIt_ShouldTakeTheMapperExpressionFromTheColumnSettingAndEvaluateIt() { // TODO: for fun, inspect this using ILSpy Expression <Func <Person, dynamic> > projector = p => new { Name = ColumnSettings.Build(() => p.FirstName + " " + p.LastName).Name("F. Name"), IsGettingTaxes = new TaxService().IsIncomingTaxSeason() }; DataTable dataTable = _people.ToDataTable(projector); ParameterExpression projectorParameter = projector.Parameters[0]; Assert.True(AreDataSetEquals( dataTable, _people.Select(projector.Compile()).ToList(), // when compiles the lambda expression, all the projector parameter references are closured (d, p) => (string)ExecuteMapper(p.Name.Mapper) == (string)d["F. Name"] && p.IsGettingTaxes == (bool)d["IsGettingTaxes"] ) ); }
public void ToDataTable_SingleProjectionThatUsesAColumnSettingInIt_ShouldGenerateTheColumnWithNoIssue() { var ids = new List <int>() { 1, 2 }; Expression <Func <int, dynamic> > projector = i => ColumnSettings.Build(() => i).Name("Id"); DataColumnCollection columns = ids.ToDataTable(projector).Columns; DataColumnCollection expectedColumns = new DataTable().Columns; expectedColumns.AddRange(new DataColumn[] { new DataColumn() { ColumnName = "Id", DataType = typeof(int), AllowDBNull = false } } ); Assert.True(AreColumnsSetEquals(columns, expectedColumns)); }