Как сравнить строковый столбец с числом (как десятичное число) в Linq - PullRequest
1 голос
/ 20 октября 2011

У меня есть база данных с полем количества - это десятичное число, хотя в схеме базы данных столбец определен как строка. Я хочу иметь возможность выполнить запрос Linq, чтобы найти значения на основе числа для суммы.

Есть вопросы типа this и this , в которых говорится об использовании метода CompareTo, но в этой ситуации это не работает. Например, у меня есть следующие суммы счета в базе данных:

556
130
1450
410

следующий код:

from t in test
where t.BillAmount.CompareTo("50") > 0
select t

вернет значение 556, но не любое из других значений, даже если они все выше десятичного значения 50.

Изменение строки where на:

    where t.BillAmount.CompareTo("50") < 0

вернет 130, 1450 и 1450, поскольку они "меньше", чем 50, в виде строки, но не в виде числа.

Я не использую платформу сущностей, поэтому я не могу сделать что-то вроде:

where SqlFunctions.StringConvert((double)t.BillAmount).Trim() > 50

У меня также нет никакого контроля над схемой базы данных, поэтому я не могу изменить эти значения. Как я могу сравнить поле BillAmount с числом и вернуть значения выше / ниже его?

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

Вам не нужно использовать Entity Framework для приведения строки к десятичной дроби.

Вы можете просто использовать вызов Convert.

var x = from t in test 
        where Convert.ToDecimal(t.BillAmount) > 50 
        select t

или с лямбда-выражением:

var x = test.where(p=>Convert.ToDecimal(p.BillAmount) > 50);
2 голосов
/ 20 октября 2011

Это хорошее место для использования let, что позволит вам иметь временную переменную как часть запроса LINQ.Примерно так должно работать:

from t in test
let amount = Convert.ToDecimal(t.BillAmount)
where amount > 50
select t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...