Linq表达式中的Int.Parse [英] Int.Parse in Linq Expression

查看:321
本文介绍了Linq表达式中的Int.Parse的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下linq表达式。我想在Nvarchar字段中计算数值的总和。我使用以下代码来做到这一点。但是当我尝试运行它时,我收到一个错误。

  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
在o.MESC上的m.OUTs中加入o等于o.MESC
在m.TANs中加入t,在inv.MESC上等于t.MESC
其中t.TYPE ==60
选择新
{
l.MESC,
l.LINE_NO,
l.UNIT_LINE,
说明= 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
选择新
{
QTY_Consum_1 = g.Where(c => int.Parse(c.tranDate)> = cuDate&& int.Parse(c.tranDate)< = endDate).Sum(d => int.Parse(d.TranQty))

}
).ToList();

错误说明:


LINQ to Entities不识别方法'Int32
解析(System.String)'方法,并且此方法不能被翻译成
到一个商店表达式


我如何解决这个问题,并写出更好的代码?



我将代码更改为

 选择新
{
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();

但收到此错误

解决方案

你不能使用int。解析在哪里,yoy可以更改代码到这个

  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 inv.MESC上的.TRAN等于t.MESC
其中t.TYPE ==60& t.QTY!=
选择新
{
l .MESC,
l.LINE_NO,
l.UNIT_LINE,
描述= lD ES ++ 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();

拳头。 ToList方法之后使用int.parse(varable)



有一个愉快的一天


I have following linq expression. I want calculate sum of numeric values in Nvarchar field. I use 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 change 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 get this error

解决方案

you can n't use int.parse in where , yoy can change code to 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();

fist call . ToList method after that use int.parse(varable)

have a nice day

这篇关于Linq表达式中的Int.Parse的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆