var par = Expression.Parameter(typeof(water_flow1), "current");
var cloneExpression = Expression.MemberInit(
Expression.New(typeof(water_flow1)),
Enumerable.Range(0, typeof(water_flow1).GetProperties().Length - 1).Select(i =>
Expression.Bind(
typeof(water_flow1).GetProperties()[i],
Expression.Property(par, typeof(water_flow1).GetProperties()[i])
)
).ToArray()
);
var cloneFunc = Expression.Lambda<Func<water_flow1, water_flow1>>(cloneExpression, "Clone", new[] { par }).Compile();