限制数据库调用的方法?特别是在ASP.NET MVC中

时间:2016-03-22 16:19:48

标签: c# asp.net asp.net-mvc database linq

所以我有两个存储库:存储库A 数据库A 存储库B 获取信息,它从数据库B获取信息

存储库A 中,我得到一个列表,比方说5000,结果。现在,我想从存储库A 获取来自存储库B 的每个结果的信息,如果该值不为空或为空,则

现在我在 Repos A 中有一个foreach循环,并在每个循环中调用 Repos B 的方法。我知道必须有一个更便宜的方法来做到这一点。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

假设这是Entity Framework,您可以通过在LINQ中执行WHERE X IN (...)来使用Contains。因此,您可以从存储库A中检索所有5000条记录,将ID列表放在一起,然后为存储库B构建单个LINQ查询 - 这可能符合您的需求:

int[] fooIDs;
using (var contextA = new ContextA()) {
    fooIDs = contextA.Foos.Select(f => f.Id).ToArray();
}

using (var contextB = new ContextB()) {
    var people = contextB.People
        .Where(p => fooIDs.Contains(p.FooID));
}