EntityFramework扩展了如何使用字典中的值进行更新

时间:2015-11-03 12:46:59

标签: c# entity-framework linq linq-to-entities entity-framework-6

我正在尝试使用以下代码更新表格

Dictionary<int, decimal> myDictionary = GetDictionary();

Context.Persons
.Where(t => mydictionary.Select(s => s.Key).Contains(t.Id))
.Update(t => new Person { Salary = mydictionary[t.Id] });
  

无法创建类型的常量值   'System.Collections.Generic.KeyValuePair`2 [[System.Int32,mscorlib,   版本= 4.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.Decimal,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'。   此处仅支持原始类型或枚举类型   上下文。

1 个答案:

答案 0 :(得分:0)

问题是EF无法将您的字典实例转换为sql表示法。正如例外所述,您只能使用基本类型集合或枚举类型集合。要避免此问题,请首先进行投影以获取密钥,然后声明您的查询:

 var keys= mydictionary.Select(s => s.Key);
 var query=Context.Persons.Where(t => keys.Contains(t.Id));
 foreach(var person in query)
 {
   person.Salary=mydictionary[person.Id];
 }
 Context.SaveChanges();

我不知道如何实现Update方法,我猜是自定义扩展方法,但我想警告你,Linq用于咨询数据,而不是修改它们,&# 39;我在我的代码中使用foreach来修改查询返回的每个人,最后我调用SaveChanges方法来保存所有更改。