saifullahiit Ответов: 1

преобразование строки в десятичную в запросе sum linq asp.net


я пытаюсь получить некоторые данные из моей таблицы базы данных с помощью Entity запроса

public List<total> gettotal(int apid)
    {
        var query = (from a in DB.TblApplicantInstallments
                     where
                         a.ApplicantId == apid
                     group a by a.ApplicantId into g
                     select new total()
                         {
                             paidtotal = g.Where(x => x.Status == "Paid").Sum(x =>decimal.Parse(x.InstallmentDueAmount)),
                            unpaidtoal = g.Where(x => x.Status == "Not Paid").Sum(x => (decimal)x.InstallmentDueAmount)

                         }).ToList();
        List<total> list = query.ToList();
        return list;
           }
}
public class total
{
    public decimal? paidtotal { get; set; }
    public decimal? unpaidtoal { get; set; }
}

но я получаю следующую ошибку:
LINQ to Entities не распознает систему метода.Десятичные Разобрать(Системы.Строка)
пожалуйста, скажите мне, что не так с моим кодом?
Заранее спасибо

Tomas Takac

Вы не можете использовать какую-либо функцию в LINQ для сущностей. Это переводится в SQL, и в переводе поддерживается только несколько вызовов функций. Чтобы сделать это, вам нужно будет материализовать перечисление на клиенте, вызвав, например, ToList (), а затем выполнить вычисление. Какой тип данных является InstallmentDueAmount? Вам нужна конверсия?

1 Ответов

Рейтинг:
8

Kornfeld Eliyahu Peter

LINQ to Entites создает SQL-оператор из вашего кода...Он не знает, что делать с этой частью синтаксического анализа, так как она не может быть преобразована в SQL...
Каков тип SQL этого столбца? Вы уверены, что вам нужно его конвертировать? Моя интуиция говорит, что это тоже числовое значение в SQL, так что все ваши усилия, чтобы превратить его в .Чистая десятичная дробь не нужна...


saifullahiit

это значение nvarchar. я хочу перевести его в десятичное число

Kornfeld Eliyahu Peter

Для меня это звучит как проблема дизайна, что вы храните сумму в виде строки...Однако попробуйте написать свою линию так:
paidtotal = г.Где(Х => У Х.Статус == "Оплачено").Сумма(х => в(десятичной)х.InstallmentDueAmount)

saifullahiit

я уже пробовал его раньше, когда он говорит, что не может преобразовать строку в десятичную.

Kornfeld Eliyahu Peter

Какое значение имеет строка?

saifullahiit

installmentdueAmount-это экономия затрат(10000,2000,3000), а его тип данных-nvarchar

Kornfeld Eliyahu Peter

Я тебя не поймал...
Если я правильно понимаю, вы получаете ошибку времени выполнения, поэтому, пожалуйста, проверьте значение времени выполнения строки...

saifullahiit

нет, нет, это не ошибка времени выполнения.

Kornfeld Eliyahu Peter

Я вижу только два варианта:
1. Используйте числовой тип в SQL (в конце концов, это числовой тип)
2. Попробуйте использовать LINQ для объекта внутри вашей сущности LINQ to
выберите новый итог().Методом asenumerable().выберите...
Во втором случае у вас не будет никаких проблем с преобразованием ваших данных...