В руководстве MySQL указано, что поля FLOAT, REAL, and DOUBLE PRECISION
сохраняют значения как приблизительные, а поля INTEGER, SMALLINT, DECIMAL, and NUMERIC
сохраняют значения как точные.
Я думаю, что лучше всего решить эту проблему с точностью до десятичной.
Ссылка: http://dev.mysql.com/doc/refman/5.1/en /numeric-types.html
Вам нужно будет установить DeferredLoadingEnabled
, а затем включить каждое свойство, используя какое-либо отражение, например:
DataLoadOptions dataLoadOptions = new DataLoadOptions();
foreach (PropertyInfo pi in typeof(SomeThingyClass).GetProperties())
{
ParameterExpression paramExp = Expression.Parameter(typeof(SomeThingyClass), "s");
Expression expr = Expression.Convert(Expression.Property(paramExp, pi.Name), typeof(object));
LambdaExpression lambda = Expression.Lambda(expr, paramExp);
dataLoadOptions.LoadWith((Expression<Func<SomeThingyClass, object>>) lambda);
}
Это сложно в LINQ to SQL. Короткий ответ: это зависит от ситуации.
Если ваши сущности расположены таким образом, что у вас есть отношения, похожие на следующие:
Customers -> Orders -> OrderDetails
И вам нужно оценить свойства всех трех сущностей, чтобы принять решение, лучшим вариантом будет написать объединение. Использование .LoadWith
позволит получить Customers
и Orders
с помощью одного оператора, но затем будет выдан запрос для каждой записи OrderDetails
.
Таким образом, даже если вы укажете все дочерние отношения с помощью LoadWith, вы не получите единый запрос для получения результата.