如何在没有 foreach 语句的情况下从列表中添加或更新?

How to AddOrUpdate from a list without foreach statement?

通常,我会在 Seed() 方法中执行类似的操作。

List<Thing> stuff = ...;
foreach(Thing thing in stuff)
  model.Things.AddOrUpdate(thing);

现在,我注意到在评论中,他们提出了这样的建议。

context.People.AddOrUpdate(
  p => p.FullName,
  new Person { FullName = "Andrew Peters" },
  new Person { FullName = "Brice Lambson" },
  new Person { FullName = "Rowan Miller" }
);

我很好奇它是否只适用于明确声明的个别实例,或者我是否可以将它连接到我的 stuff 列表?

我尝试了以下方法,当然没有用,然后我意识到也许我一开始就对着错误的树吠叫。所以在我发出过多的吠叫之前,我会谦虚地问一下这是否可能。

context.Things.AddOrUpdate(_ => _, stuff);

您的示例中使用的两个 extension methods 都有一个 params 数组作为最后一个参数。这意味着如果您提供多个项目中的一个,那么将创建一个包含这些项目的数组。

或者,您可以只提供一个数组,这样就可以了:

model.Things.AddOrUpdate(stuff.ToArray());

参数的 documentation 和包含的示例可能会有用。