gpt4 book ai didi

c# - 无法识别方法 'System.String ToString()' 方法,并且无法将此方法翻译成存储表达式

转载 作者:太空狗 更新时间:2023-10-29 18:07:32 26 4
gpt4 key购买 nike

我已经查看了与此相关的所有示例,但未能解决我的问题。

我正在 asp .net mvc3 中创建一个下拉列表。

我有一个返回的存储库:

    public IEnumerable<SelectListItem> GetPropertyTypeSelectList()
{
var propertyTypes = from p in db.PropertyType
orderby p.PropertyTypeDescription
select new SelectListItem
{
Text = p.PropertyTypeDescription,
Value = p.PropertyTypeId.ToString()
};
return propertyTypes;
}

我的 View 模型如下所示:

public class AddPropertyViewModel
{
public Property Property { get; set; }
public IEnumerable<SelectListItem> PropertyTypes { get; set; }
public IEnumerable<SelectListItem> FurnishedTypes { get; set; }
}

我的 HttpGet“创建”操作 Controller 如下所示:

    public ActionResult AddProperty()
{
AddPropertyViewModel viewModel = new AddPropertyViewModel
{
PropertyTypes = websiterepository.GetPropertyTypeSelectList()

};
return View(viewModel);
}

View 是这样的:

    <div class="editor-label">
@Html.LabelFor(model => model.Property.PropertyType)
@Html.DropDownListFor(model => model.Property.PropertyType, Model.PropertyTypes)
</div>

我收到上面的错误。从我读到的内容来看,ToString() 似乎是导致问题的原因。但我不确定如何更正它。

谢谢。

最佳答案

LINQ to SQL 不知道如何将 .ToString() 调用转换为 SQL 表达式。

所以替换:

var propertyTypes = 
from p in db.PropertyType
orderby p.PropertyTypeDescription
select new SelectListItem
{
Text = p.PropertyTypeDescription,
Value = p.PropertyTypeId.ToString()
};

与:

var propertyTypes = db
.PropertyType
.OrderBy(x => x.PropertyTypeDescription)
.ToList()
.Select(x => new SelectListItem
{
Text = p.PropertyTypeDescription,
Value = p.PropertyTypeId.ToString()
});

注意 .ToList() 调用在构建表达式后急切地执行 SQL 查询,直到 OrderBy 子句,然后执行 .ToString() 在客户端上(LINQ to Objects 而不是 LINQ to Entities),其中完全支持 .ToString() 表达式。

所以基本上我们在这里构建一个 SQL 查询,直到 OrderBy 子句(包括),然后调用 .ToList 来急切地执行这个查询并在客户端获取结果集。然后我们继续使用 .Select 语句进行链接。但是我们不再做任何 LINQ to Entities 或 SQL 的事情。我们现在正在对对象执行 LINQ,因为所有结果集现在都在内存中。在 LINQ to Objects 中执行 .ToString 不会带来任何挑战。

另一种可能性是使用 SqlFunctions.StringConvert 内置函数,该函数知道如何将其转换为 SQL。这样你就可以保持惰性:

var propertyTypes = 
from p in db.PropertyType
orderby p.PropertyTypeDescription
select new SelectListItem
{
Text = p.PropertyTypeDescription,
Value = SqlFunctions.StringConvert((double)p.PropertyTypeId)
};

关于c# - 无法识别方法 'System.String ToString()' 方法,并且无法将此方法翻译成存储表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12045176/

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