Указанное литье недопустимо при использовании литья - PullRequest
0 голосов
/ 03 августа 2011

Я получаю следующую ошибку при попытке получить сумму в этом запросе Linq :

InvalidCastException не обработано.Указанное приведение недопустимо.

Я использовал свойство DataType для тройной проверки, является ли столбец фактически двойным, и это так.

foreach (DataColumn item in _dttMasterViewTransaction.Columns)
{
    if (item.ColumnName == "Dr")
    {
        //Outputs: System.Double!
        MessageBox.Show(item.DataType.ToString());
    }
}

var datos = _dttMasterViewTransaction.AsEnumerable().Where(r => (int)r["Entity"] == FundsID).Select(r => new EntityJESummary()
{
    JEId = (int)r["JE ID"],
    JEGroupingId = (int)r["JE Group"],
    PartnershipId = (int)r["Entity"],
    BookingDate = Convert.ToDateTime(r["GL Date"]),
    EffectiveDate = Convert.ToDateTime(r["Effective Date"]),
    Allocated = Convert.ToBoolean(r["Allocated"]),
    JEEstate = (int)r["JE State"],
    JEComments = r["JE Comments"].ToString(),

    Debit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == FundsID).Sum(s => (double)s["Dr"]),
    Credit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == FundsID).Sum(s => (double)s["CR"])

}).First();

Любые предложения о том, почему это может произойти?

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Являются ли какие-либо записи пустыми для этого поля? или есть такие, которые не являются двойниками?

нам нужно увидеть больше данных, чтобы получить лучший ответ ...

0 голосов
/ 03 августа 2011

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

Debit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == 
FundsID).Sum(s => (double?)s["Dr"]),     
Credit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == 
FundsID).Sum(s => (double?)s["CR"])

Проверьте эту ссылку для более подробной информации:

http://weblogs.asp.net/zeeshanhirani/archive/2008/07/15/applying-aggregates-to-empty-collections-causes-exception-in-linq-to-sql.aspx

0 голосов
/ 03 августа 2011

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

Debit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == FundsID).Sum(s => (String.IsNullOrEmpty(s["Dr"]) ? 0d : (double)s["Dr"])),
Credit = _dttMasterViewTransaction.AsEnumerable().Where(s => (int)r["Entity"] == FundsID).Sum(s => (String.IsNullOrEmpty(s["CR"]) ? 0d : (double)s["CR"]))
...