C# LINQ将字符串转换为int

C# LINQ将字符串转换为int,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有一个linq查询,它正在做一个选择,然后尝试求和总数,因此在每个组键下都有一个总和。该值是一个字符串,我无法对字符串求和。但是,当我尝试转换为int时,我得到一个错误: LINQ to Entities无法识别方法“Int32到Int32(System.String)”方法,并且无法将此方法转换为存储表达式 var dataSet = entities.BL_MT_CATEGORY .Distinct() .Where(d => (iG

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

LINQ to Entities无法识别方法“Int32到Int32(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实体转换为有效查询。之后,它将执行分组和选择
.Sum()

仅获取要求和的列,并使tolist大于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));

@仇杀在
string
int
之间没有明确的强制转换。使用实体框架函数,虽然有效,但效率很低。但并不是说有好的L2E解决方案。这就是为什么数字/日期不应存储为字符串的原因。您是正确的,它没有那么有效。正如您所说的,当数据存储错误时,它不会非常有效。此外,根据应用程序的不同,某些优化(如此优化)可能没有那么重要。