Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么将选定值添加到我的SelectList会导致模型更改/迁移错误?_C#_Entity Framework - Fatal编程技术网

C# 为什么将选定值添加到我的SelectList会导致模型更改/迁移错误?

C# 为什么将选定值添加到我的SelectList会导致模型更改/迁移错误?,c#,entity-framework,C#,Entity Framework,下面的代码非常适合创建我的类别的SelectList var categoryList = _context.Category.Select(f => new SelectListItem { Value = f.ID.ToString(), Text = f.CategoryName }); 现在,我想在编辑项目时,将当前类别设置为默认的SelectList var categoryList = _context.Category.Select(f =>

下面的代码非常适合创建我的类别的
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
 });
var categoryList=\u context.Category.Select(f=>newselectListItem
{
Value=f.ID.ToString(),
Text=f.CategoryName,

Selected=(f.ID==itemModel.category.ID)//这是因为EF无法在SQL中转换该表达式

最简单的方法是使用构造函数重载创建,如:

var categoryList = new SelectList(_context.Category.ToList(),
                                  "ID", // data value field
                                  "CategoryName", // data text field
                                   itemModel.category.ID   // selected value
                                 );

这是因为EF无法在SQL中转换该表达式

最简单的方法是使用构造函数重载创建,如:

var categoryList = new SelectList(_context.Category.ToList(),
                                  "ID", // data value field
                                  "CategoryName", // data text field
                                   itemModel.category.ID   // selected value
                                 );

LINQ to SQL总是尝试从子句、语句和条件构建SQL查询,然后运行该查询。但在这种情况下,它无法将代码转换为SQL,因为代码引用的对象在该上下文中不可用

解决方案:
\u context.Category.Select(…)
替换为
\u context.Category.ToList()。选择(…)


条件现在在对象列表上而不是在数据库上求值。

LINQ to SQL始终尝试从子句、语句和条件构建SQL查询,然后运行该查询。但在这种情况下,它无法将代码转换为SQL,因为代码引用的对象在该上下文中不可用

解决方案:
\u context.Category.Select(…)
替换为
\u context.Category.ToList()。选择(…)


条件现在在对象列表上进行计算,而不是在数据库上进行计算。

这就解决了问题!知道为什么是另一个方法导致了错误吗?ef无法将该条件转换为SQL解决了问题!知道为什么是另一个方法导致了错误吗?ef无法将该条件转换为SQL这也起作用并且有意义。Th谢谢你的解释。这也很有效,很有意义。谢谢你的解释。