为什么LINQ to Entities不承认'System.String ToString()方法?

 2023-02-17    261  

问题描述

在MVC3 Web应用程序中获取错误.
LINQ to Entities does not recognize the method ‘System.String ToString()’ method, and this method cannot be translated into a store expression.

当我尝试使用来自查询的EF获取值时:

为什么LINQ to Entities不承认'System.String ToString()方法?

public class DataRepository
    {
        public mydataEntities1 dbContext = new mydataEntities1();

        public List<SelectListItem> GetPricingSecurityID()
        {
        var pricingSecurityID = (from m in dbContext.Reporting_DailyNAV_Pricing
                                     select new SelectListItem
                                         {
                                                Text = m.PricingSecurityID.ToString(),
                                                Value = m.PricingSecurityID.ToString()
                                         });

        return pricingSecurityID.ToList();
        }
    }

推荐答案

无法转换为SQL.从理论上讲,我想它可以,但没有实施.

获得结果后,您只需要执行投影:

var pricingSecurityID = (from m in dbContext.Reporting_DailyNAV_Pricing
                                     select m.PricingSecurityID).AsEnumerable()
    .Select(x => new SelectListItem{ Text = x.ToString(), Value = x.ToString() });

其他推荐答案

如果已经是字符串,为什么首先要打电话给ToString?我怀疑LINQ中未包含翻译到实体,因为它毫无意义.将您的选择子句更改为:

select new SelectListItem
{
    Text = m.PricingSecurityID,
    Value = m.PricingSecurityID
}

如果您真的需要做一些Linq不支持实体的事情,请使用AsEnumerable从数据库查询过渡到程序中:

public List<SelectListItem> GetPricingSecurityID()
{
    return dbContext.Reporting_DailyNAV_Pricing
                    .Select(m => m.PricingSecurityID)
                    .AsEnumerable() // Rest of query is local
                    // Add calls to ToString() if you really need them...
                    .Select(id => new SelectListItem { Text = id, Value = id })
                    .ToList();
}

我也同意杰森的反对意见,顺便说一句.您最好返回在其他地方渲染的List<string>.

还要注意,如果您 Just 要使用单个select子句或where子句,则查询表达式确实不会添加太多 – 调用Linq扩展方法可以最终以更少的混乱,尤其是如果要调用不支持的方法(例如ToList).

其他推荐答案

因为它试图将其转换为SQL,但不能将其转换为SQL.拨打ToString的电话,然后在返回呼叫者之前进行投影.因此,用

替换您的select子句

select m.PricingSecurityID

然后说

return pricingSecurityID
           .AsEnumerable()
           .Select(x => x.ToString())
           .Select(x => new SelectListItem { Text = x, Value = x })
           .ToList();

另外,我注意到您正在混合使用UI问题和数据查询问题.这通常是一个不好的做法.的确,您应该只返回ID列表,然后让代码的UI部分担心将其罚款到正确的形式.

以上所述是小编给大家介绍的为什么LINQ to Entities不承认'System.String ToString()方法?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://www.77isp.com/post/34272.html

=========================================

https://www.77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。