Int.Parse in Linq Expression
Entity Framework can't translate that type of conversion to SQL.
Is there any chance you could alter your data structure to use proper data types such as actual DateTime
types? For large data volumes conversions like that will affect performance.
I would recommend either changing your data model types to avoid these conversions, or if the amount of data will always be small, then get the data first, and later use Linq to Objects.
In your where clause, you can't call int.Parse
. Entity Framework doesn't know how to convert that to SQL. Consider revising your Where
.
EF 5:
Instead of int.Pasrse
use Convert.ToInt32
. Entity Framework will generate proper CAST
functions in SQL.
EF 6:
Short answer:
youEntity.Where(c=>SqlFunctions.StringConvert((decimal?)c.INTFIELD).Trim() == STRINGVALUE)
Long answer:
in EF 6 you have to convert numeric value to string with SqlFunctions.StringConvert. but it has a problem. It will add unnecessary spaces to the result. so the comparison will fail. That's why I have put Trim()
there. I have tested it with EF 6.1.1.
You can't use int.parse in where
. You can rewrite your query like this:
var list = (from x in
(
from inv in m.INVs
join l in m.LIBs on inv.MESC equals l.MESC
join o in m.OUTs on inv.MESC equals o.MESC
join t in m.TRANs on inv.MESC equals t.MESC
where t.TYPE == "60" && t.QTY!=""
select new
{
l.MESC,
l.LINE_NO,
l.UNIT_LINE,
Description = l.DES + " " + l.PART_NO,
inv.NEW_QTY,
o.PJ,
o.DATE,
o.QTY,
o.QTY_REC,
TranQty = t.QTY,
tranDate = t.DATE
}
).ToList()
group x by
new
{
x.MESC,
x.LINE_NO,
x.UNIT_LINE,
x.Description,
x.NEW_QTY,
x.PJ,
x.DATE,
x.QTY,
x.QTY_REC
}
into g
select new
{
QTY_Consum_1 = g.Where(c => int.Parse(c.tranDate) >= cuDate && int.Parse(c.tranDate) <= endDate).Sum(d => int.Parse(d.TranQty)),
g.Key.MESC
}
).ToList();
Call .ToList()
method, then use int.Parse(variable)
.
Have a nice day.