C# 如何在linq查询中将字符串正确转换为十进制?

C# 如何在linq查询中将字符串正确转换为十进制?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,在我的C#MVC 5应用程序中,我尝试使用linq查询将sql server表中的NVarChar列转换为十进制,并在视图中显示它 我知道,如果我要执行简单的SQL查询或使用webforms,我可以简单地执行以下操作: Select Sum(Cast(GrandTotal as decimal)) as GrandTotal From [myDB].[dbo].[Table] WHERE Year = '2017' 在林克我该怎么做?这就是我所尝试的: public ActionResult

在我的C#MVC 5应用程序中,我尝试使用linq查询将sql server表中的NVarChar列转换为十进制,并在视图中显示它

我知道,如果我要执行简单的SQL查询或使用webforms,我可以简单地执行以下操作:

Select Sum(Cast(GrandTotal as decimal)) as GrandTotal From [myDB].[dbo].[Table] 
WHERE Year = '2017'
在林克我该怎么做?这就是我所尝试的:

public ActionResult Total()
{
    var model = (from p in db.Table
                where p.Year.Equals("2017")
                select decimal.Parse(p.GrandTotal)).Sum();

    return View(model);
}
错误如下: LINQ to Entities无法识别“System.Decimal Parse(System.String)”方法,并且无法将此方法转换为存储表达式

不是重复的


标题类似,但解决方案不同。此外,我能够通过使用给出的解决方案来解决问题。您将此标记为的副本的问题没有明确的解决方案

我不知道LINQ To Entities函数可以实现这一点。Id使用LINQ对对象执行此操作:

var result = (from p in db.Table where "2017" == p.Year select p).ToList();
var model = (from p in result select decimal.Parse(p.GranTotal)).Sum();

@加文:那是林克对对象。我刚才肯定是这么说的。哦,拜托@SamAxe,你不能因为他提供了你发布的确切答案而跟踪他。林克对实体是不可能的。为什么人们将数字/日期/时间数据存储为字符串而使事情变得更困难是一个疑问。人们必须问,为什么要将十进制值存储为数据库中的字符串。您应该使用类型为
money
的列。这是您可以更改的吗?当我尝试启动视图
时,此解决方案会给我一个不同的错误传递到字典中的模型项的类型为“System.Decimal”,但此字典需要类型为
的模型项,这是一个完全不同的问题,应该作为不同的问题发布。但在提出问题之前,你应该先读一下这些词,让它们慢慢地融入其中。你会明白的,我解决了。谢谢你,伙计!