Linq to sql linq2sql lambda表达式中的字符串到int

Linq to sql linq2sql lambda表达式中的字符串到int,linq-to-sql,Linq To Sql,我有一个lambda表达式,它返回表中两个字段的总和。问题是字段(ExpectedQuantity)是一个字符串,而QtyExpected是一个int。我本以为可以在lambda表达式中使用int.Parse,但我收到一个错误,说SQL无法翻译它 return new QuantitiesDashboardAggregate() { QtyExpected = query.Sum(x => int.Parse(x.ExpectedQuantity))

我有一个lambda表达式,它返回表中两个字段的总和。问题是字段(ExpectedQuantity)是一个字符串,而QtyExpected是一个int。我本以为可以在lambda表达式中使用int.Parse,但我收到一个错误,说SQL无法翻译它

return new QuantitiesDashboardAggregate()
        {
            QtyExpected = query.Sum(x => int.Parse(x.ExpectedQuantity)),
            QtyReceived = query.Sum(x => int.Parse(x.ReceivedQuantity)),
        };
有人能帮忙吗

下面是我如何定义查询变量的:

 IQueryable<Data.POProduct> query = this.Database.POProducts;

        // Apply date range
        DateRange dateRange = new DateRange(args.DateRangeFilter, args.DateRangeCriteria);

        switch (dateRange.DateRangeFilter)
        {
            case DateRangeFilter.Date:
                query = query.Where(po => po.PurchaseOrder.FiscalDate.Date == dateRange.Date);
                break;
            case DateRangeFilter.FiscalWeek:
                query = query.Where(po => (po.PurchaseOrder.FiscalDate.Year == dateRange.Year) &&
                                          (po.PurchaseOrder.FiscalDate.WeekYear == dateRange.Number));
                break;
            case DateRangeFilter.FiscalPeriod:
                query = query.Where(po => (po.PurchaseOrder.FiscalDate.Year == dateRange.Year) &&
                                          (po.PurchaseOrder.FiscalDate.Period == dateRange.Number));
                break;
            case DateRangeFilter.FiscalYear:
                query = query.Where(po => po.PurchaseOrder.FiscalDate.Year == dateRange.Year);
                break;
            default:
                break;
        }
IQueryable query=this.Database.POProducts;
//应用日期范围
DateRange DateRange=新的日期范围(args.DateRangeFilter,args.DateRangeCriteria);
开关(dateRange.DateRangeFilter)
{
案例日期范围筛选器。日期:
query=query.Where(po=>po.PurchaseOrder.FiscalDate.Date==dateRange.Date);
打破
案例DateRangeFilter.FiscalWeek:
query=query.Where(po=>(po.PurchaseOrder.FiscalDate.Year==dateRange.Year)&&
(po.PurchaseOrder.FiscalDate.WeekYear==dateRange.Number));
打破
案例DateRangeFilter.FiscalPeriod:
query=query.Where(po=>(po.PurchaseOrder.FiscalDate.Year==dateRange.Year)&&
(po.PurchaseOrder.FiscalDate.Period==dateRange.Number));
打破
案例DateRangeFilter.FiscalYear:
query=query.Where(po=>po.PurchaseOrder.FiscalDate.Year==dateRange.Year);
打破
违约:
打破
}

基本上Linq to SQL无法翻译您的表达式,因此您应该在查询中调用
.ToList()(或.AsEnumerable())
,它将获取数据drom db,然后您可以将表达式与int.Parse一起使用

如何获取“query”变量?您的意思是:int.Parse(query.Sum(x=>x.ExpectedQuantity).ToList())?这不起作用,总和仍然告诉我它无法转换。不,这不会有帮助,你能提供一个初始化查询变量的代码吗?尝试将IQueryable query=This.Database.POProducts更改为var query=This.Database.POProducts.ToList(),如果我这样做,switch语句中的后续行将不会编译,因为查询将转换为列表。