Int.Parse in Linq Expression

c#, entity-framework, linq

Solution

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.

Problem

I have the following LINQ expression. I want calculate the sum of numeric values in an `nvarchar` field. I'm using following code to do this, but I get an error when I try to run this. ``` var m = new MaterialModelContainer(); 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" 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 } ) 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)) } ).ToList(); ``` Error Description: LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression How can I solve this problem and write this code better than this? I changed the code to this: ``` select new { QTY_Consum_1 = g.Where(c => SqlFunctions.StringConvert(c.tranDate) >= cuDate && SqlFunctions.StringConvert(c.tranDate) <= endDate).Sum(d => SqlFunctions.StringConvert(d.TranQty)), g.Key.MESC } ).ToList(); ``` but got this error:

Original source

Related problems