gpt4 book ai didi

c# - 从数据库创建组合框时无法将 int 隐式转换为字符串

转载 作者:行者123 更新时间:2023-12-04 00:25:29 26 4
gpt4 key购买 nike

我正在尝试在 MVC 3 中的创建 View 中填充组合框。这是我到目前为止所做的:

    public ActionResult Create()
{
var db = new ErrorReportingSystemContext();
IEnumerable<SelectListItem> items = db.Locations
.Select(c => new SelectListItem
{
Value =c.id,
Text = c.location_name
});
ViewBag.locations = items;
return View();
}

但是,当我尝试运行它时,出现编译错误:

无法将 int 隐式转换为 string

this发布我读到的内容

Value = SqlFunctions.StringConvert((double)c.ContactId)

会解决问题,但是当我尝试这样做时,出现以下错误:

名称“SqlFunctions”在当前上下文中不存在

我做错了什么?

更新:

执行 Value = c.id.ToString() 给出错误:

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

最佳答案

您的问题是 EF 无法将转换转换为字符串或 .ToString() 方法。

因此您需要在选择到 SelectListItems 之前评估数据库查询(通过调用 .AsEnumerable())

IEnumerable<SelectListItem> items = db.Locations
.AsEnumerable()
.Select(c => new SelectListItem
{
Value = c.id.ToString(),
Text = c.location_name
});

但是这种方法存在一些性能问题,因为生成的 SQL 查询将如下所示:

SELECT * FROM Locations ...

因此,如果 Locations 表有 50 列,EF 将从所有列中加载数据,尽管稍后您只需要来自两列的数据。

您可以告诉 EF 应该加载哪些列,首先选择匿名类型,然后选择 SelectListItems:

IEnumerable<SelectListItem> items = db.Locations
.Select(c => new
{
c.id,
c.location_name
});
.AsEnumerable()
.Select(c => new SelectListItem
{
Value = c.id.ToString(),
Text = c.location_name
});

生成的查询看起来像这样:

 SELECT id, location_name FROM Locations

关于c# - 从数据库创建组合框时无法将 int 隐式转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com