以下代码可完美地用于创建我的类别的SelectList
。
var categoryList = _context.Category.Select(f => new SelectListItem
{
Value = f.ID.ToString(),
Text = f.CategoryName
});
现在,我想在编辑项目时使用当前类别默认SelectList
。
var categoryList = _context.Category.Select(f => new SelectListItem
{
Value = f.ID.ToString(),
Text = f.CategoryName,
Selected = (f.ID == itemModel.category.ID) // <- added this line
});
但是我收到了这个错误:
如果我只是将其快捷方式用于测试目的:Selected = (true)
代码会再次运行而不会出错。
为什么添加bool检查f.ID == itemModel.category.ID
会导致模型更改?左手和右手值均为int。我该如何解决这个问题?
P.S。只是为了咧嘴笑,我尝试添加一个迁移,但我仍然得到同样的错误。
答案 0 :(得分:1)
这是因为EF无法在SQL中翻译该表达式。
最简单的方法是使用其构造函数重载创建SelectList,如:
function olLiTree($tree)
{
echo '<pre>';
foreach($tree as $key => $item) {
if (is_array($item)) {
echo '<pre>'. $key ;
olLiTree($item);
echo '</pre>';
} else {
echo '<pre>' . $item. '</pre>';
}
}
echo '</ul>';
}
print(olLiTree($results));
答案 1 :(得分:1)
LINQ-to-SQL总是尝试从子句,语句和条件构建SQL查询,然后运行该查询。但在这种情况下,它无法将您的代码转换为SQL,因为代码引用了在该上下文中不可用的对象。
<强>解决方案:强>
将_context.Category.Select(...)
替换为_context.Category.ToList().Select(...)
。
现在,在对象列表上而不是在数据库上评估条件。