Почему LINQ String Interpolation для десятичного поля генерирует неправильный SQL? - PullRequest
0 голосов
/ 21 января 2020

Я хотел построить код для итерации свойств любого объекта и построить динамический c пункт в LINQ на основе полей, которые имеют допустимое значение. У меня это работает.

Однако в приведенном ниже коде вы увидите закомментированные строки, которые используют интерполяцию строк, и они просто не работают. Комментарий объясняет, но при проверке сгенерированного SQL это потому, что предложение WHERE совершенно неверно. Это происходит только для десятичных полей, и это просто строка, которая работает.

Это не конец света, но я собираюсь потерять сон из-за того, почему LINQ генерирует это. , , какие-нибудь идеи или помощь? Большое спасибо!

// TODO: why does the string interpolation not work?
// it outputs BudgetApproved.Equals(115500.00) which for some reason when query is 
// constructed becomes FROM [Tactic] AS [t] WHERE CAST(0 AS bit) = CAST(1 AS bit)

string whereClause = fieldName + " = " + fieldValue;
//string whereClause = string.Format("{0}.Equals({1})", fieldName, fieldValue);
//string whereClause = $"{fieldName}.Equals({fieldValue})";

query = query.Where(whereClause);

ОБНОВЛЕНО

Похоже, предложение @NetMage работает, но это странно, потому что в непосредственном окне два вывода выглядят одинаково.

?fieldName + ".Equals(" + fieldValue + ")";
"ExpenseCategoryItemId.Equals(1)"
?string.Format("{0}.Equals({1})", fieldName, fieldValue);
"ExpenseCategoryItemId.Equals(1)"
...