LINQ 将字符串转换为整数

LINQ converting string to int

我有这个 linq 查询,它正在进行选择,然后尝试对总计求和,因此在每个组键下都有一个总计。该值是一个字符串,我无法对一个字符串求和。但是,当我尝试转换为 int 时出现错误:

LINQ to Entities 无法识别方法 'Int32 ToInt32(System.String)' 方法,并且无法将此方法转换为存储表达式。

 var dataSet = entities.BL_MT_CATEGORY
            .Distinct()
            .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography))
            && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer))
            && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country))
            && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport))
            && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName))
            && (iCategory.Contains(d.Category))
            && (d.Values == "Sum of EuroValue"))
            .GroupBy(x => x.Category)
            .Select(g => new {
                C201408 = g.Sum(x => Convert.ToInt32(x.C201408))
            })
            .ToList();

尝试将转化移到查询之外。

var dataSet = entities.BL_FERRERO_MT_CATEGORY
        .Distinct()
        .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography))
        && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer))
        && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country))
        && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport))
        && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName))
        && (iCategory.Contains(d.Category))
        && (d.Values == "Sum of EuroValue"))
        .ToList()
        .GroupBy(x => x.Category)
        .Select(g => new {
            C201408 = g.Sum(x => Convert.ToInt32(x.C201408))});

这是使 LINQ to Entities 转换有效查询。之后会进行.Sum().

的分组和选择

仅获取要求和的列并将其列为求和列表。

var dataSet = entities.BL_FERRERO_MT_CATEGORY
        .Distinct()
        .Where(d => (iGeography.FirstOrDefault() == "" || iGeography.Contains(d.Geography))
        && (iRetailer.FirstOrDefault() == "" || iRetailer.Contains(d.Retailer))
        && (iCountry.FirstOrDefault() == "" || iCountry.Contains(d.Country))
        && (iAirport.FirstOrDefault() == "" || iAirport.Contains(d.Airport))
        && (iShop.FirstOrDefault() == "" || iShop.Contains(d.StoreName))
        && (iCategory.Contains(d.Category))
        && (d.Values == "Sum of EuroValue"))
        .Select(x=>x.C201408)
        .ToList()
        .Sum(x=>int.Parse(x));