C# LINQ将字符串转换为int
我有一个linq查询,它正在做一个选择,然后尝试求和总数,因此在每个组键下都有一个总和。该值是一个字符串,我无法对字符串求和。但是,当我尝试转换为int时,我得到一个错误: LINQ to Entities无法识别方法“Int32到Int32(System.String)”方法,并且无法将此方法转换为存储表达式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
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解决方案。这就是为什么数字/日期不应存储为字符串的原因。您是正确的,它没有那么有效。正如您所说的,当数据存储错误时,它不会非常有效。此外,根据应用程序的不同,某些优化(如此优化)可能没有那么重要。