3

我遇到了一些我的代码的障碍。我有一个控制器,我调用它从我的数据库中检索公司列表。但是,当我对其进行测试时,我收到一条错误消息,指出:LINQ to Entities 无法识别方法System.String ToString()方法,并且此方法无法转换为存储表达式。

我似乎无法找到解决此问题的方法,并且有人建议我使用foreach循环。

public List<SelectListItem> GetCompanyList()
{
    using (var ctx = new Risc_Track_beEntities())
    {
        var companies = ctx.tblCodeBrokerComps.Where(comp => comp.BrokerCompStatus == 1);
        var activeBrokerLocs = companies.Select(b => new SelectListItem
        {
            Value = b.BrokerCompID.ToString(),
            Text = b.BrokerComp
        });
        return activeBrokerLocs.ToList<SelectListItem>();
    }
}
4

3 回答 3

6

ToString()在这种情况下,LINQ to SQL 不知道如何转换为 SQL。

最简单的解决方案是使用AsEnumerable将控制“转移”到 LINQ to Objects。您可以使用首字母Select来确保您只从数据库中提取相关字段,然后AsEnumerable获取一个IEnumerable<T>,然后另一个Select作为最终结果:

var activeBrokerLocs = companies.Select(b => new { b.BrokerCompID,
                                                   b.BrokerComp })
                                .AsEnumerable()
                                .Select(b => new SelectListItem
                                {
                                    Value = b.BrokerCompID.ToString(),
                                    Text = b.BrokerComp
                                });
于 2013-10-31T19:15:04.477 回答
1

您不能ToString()作为 linq to sql 调用的一部分进行调用。linq to sql 语句被转换为实际的 sql,并且 sql 没有 ToString() 方法。

尝试在 sql 中创建一个更接近模型的对象,然后将其转换为您需要的实际对象

于 2013-10-31T19:14:57.273 回答
0

您也可以使用SqlFunctions.StringConvert。在你的情况下

Value = SqlFunctions.StringConvert((decimal)b.BrokerCompID)
于 2013-10-31T19:22:28.217 回答