2016-07-28 48 views
0

我有tbl_purchase表,其中有order_date - DateTime,price - nvarchar,pid - int等字段,要求是显示图表中每年的总价格。所以为了得到价格,我决定去SumAsync。但这里的问题是price字段将会被存储,并附加$,如$12,234.03,$4,453.23等,并且如上所述它是nvarchar字段。我试图分裂SumAsync()内的值,但得到编译错误。关于如何使用这个完全空白?任何解决方法拆分$并总结值?以下是我的尝试。SumAsync()与nvarchar值

ChartData.cs

public class ChartData 
{ 
    public string period {get;set;} 
    public int purchase {get;set;} 
    public string purchaseAmount {get;set;} 
} 

控制方法

var areaModel = new List<ChartData>(); 
var yearList = new string[]{'2015','2016'}; 
foreach (var year in yearList) 
{ 
    int yr=Convert.ToInt32(year); 
    var model = new ChartData 
    { 
     period = year, 
     purchaseAmount=await context.tbl_purchases.Where(x=>x.order_date.Year == yr).SumAsync(x=>(long)x.price.Split('$')[1]); //shows complie error. Its expecting `long` but the conversion doesn't happen well here. 
    }; 
    areaModel.Add(model); 
} 
+1

为什么价格存储为'varchar'而不是'money'或'decimal'?这对我来说似乎很奇怪。无论如何,像下面的东西应该工作'x => Convert.ToDecimal(Regex.Replace(x.price,“[^ 0-9。]”,“”));'? – mituw16

+0

@ mituw16 ..让我尝试一次.. :) –

回答

1

如果价格格式进行计算,并始终可以做如下计算价格相同:

var price = new List<string> { "$4,000.99","$20.99","$40,000.88"}; 

var sum = price.AsEnumerAble().Sum(x => double.Parse(x.Replace("$", "0"))); 

我只是用0替换$并计算总和。

+0

我会试一试,让你知道.. :) –

+0

引发运行时异常 - “LINQ to Entities无法识别该方法”Double Parse(System.String )'方法,并且此方法不能转换为商店表达式。' –

+0

您需要在Sum之前使用'.AsEnumerable()'。 –