C# C实体框架.Find(id)方法的时间复杂度是多少

C# C实体框架.Find(id)方法的时间复杂度是多少,c#,performance,entity-framework,C#,Performance,Entity Framework,.Findid方法的时间复杂度是多少?循环查看id列表并使用。查找是个坏主意吗 还可以在同一查询中“查找”多个id吗 foreach (var id in idList) { var task = _model.Tasks.Find(id); Save(task,task.id); } 执行此操作的最佳方法是什么?根据您使用元素的方式和元素的数量,您可能会发现一次加载所有实体要好得多: // given List<int> idList var tasks = _m

.Findid方法的时间复杂度是多少?循环查看id列表并使用。查找是个坏主意吗

还可以在同一查询中“查找”多个id吗

foreach (var id in idList)
{
    var task = _model.Tasks.Find(id);
    Save(task,task.id);
}

执行此操作的最佳方法是什么?

根据您使用元素的方式和元素的数量,您可能会发现一次加载所有实体要好得多:

// given List<int> idList
var tasks = _model.Tasks.Where(x => idList.Contains(x.id))

foreach (var task in tasks)
{
    Save(task, task.id);
}
请注意,Find使用主键执行Where操作,因此如果实体没有主键或具有复合键,则必须小心。您也不会得到任何键类型的编译时安全性,即您可以将字符串传递给具有int PK的实体,并仅在运行时发现。
当然,如果列表足够大,一次带来所有数据可能会遇到OutOfMemoryException。

这感觉像是XY问题。退后一步,解释您的潜在问题。Find执行一个SELECT*FROM表,其中ID=x。如果您想为一系列ID带来所有实体,请执行单个查询=>\u model.Tasks.Wherex=>idList.Containsx.idWhy标记?@jarlh有时实体框架会与SQL对话,我想…:坑非常罕见,你会想找到许多不同的项目,而这些项目在某种形式上是不相关的。所以你会发现它们是基于一个共同点。无论如何,在for循环中不应该有save。。。在这种情况下,这可能是您在性能方面的实际问题。