【发布时间】:2018-06-25 15:37:35
【问题描述】:
我需要根据要更改的记录列表更新多条记录。当该列表由一列标识时,这样做很简单:
var fooIds = new List<int> { 2, 3, 4}
var foosToChange = Foo.Where(f => fooIds.Contains(f.Id));
// Update foosToChange and save here
当传入列表是一个具有两个属性的对象时,会发生什么情况?例如:
var fooIds = new []
{
new { prop1 = "12345", prop2 = 2017111701 },
new { prop1 = "hij", prop2 = 2018060101 }
};
这需要变成什么?
var foosToChange = Foo.Where(f => fooIds.Contains(???));
这可能吗?
【问题讨论】:
-
我想我知道你的意思,但我认为这不会奏效。如果您确实包含在第一个列表中,那么在第二个列表中,您可以接受任何属性组合,而您实际上只能接受特定的 prop1 + prop2 组合。
-
您必须分 3 步完成。使用 where+any 过滤记录(参见下面的答案),从 EF 中具体化记录,然后执行内存连接,以便更新具体化记录,最后将更改持久化。
-
我通过执行以下操作获得结果:
var foos = from foo in foos join fooDb in Foo on foo.processId equals fooDb.ProcessId select fooDb;那是因为您无法将本地连接到 SQL,但您可以根据此答案执行相反操作:stackoverflow.com/a/26966037/279516跨度>