Как ускорить выборку элементов List

private List<Document> FindDisabledDocuments()
{
    List<Document> disabledDocuments = new();
    if (User is null)
    {
        return disabledDocuments;
    }
    foreach (var d in Documents)
    {
        if (d.Users.Find(u => u.Id == User.Id) is null) // Users is List<User>
        {
            disabledDocuments.Add(d);
        }
    }
    return disabledDocuments;
}

public class User
{
    public int Id { get; set; }
    // Several internal properties...
    public virtual List<Document> EnabledDocuments { get; set; } = null!;
}

public class Document
{
    public int Id { get; set; }
    // Several internal properties...
    public virtual List<User> Users { get; set; } = null!;
}

Всё работает, но при большом количестве записей выборка занимает значительное время.

Как можно ускорить процесс выборки?


Ответы (1 шт):

Автор решения: CrazyElf

Попробуйте LINQ запрос написать. Что-то такое, если я правильно понял логику метода:

private IEnumerable<Document> FindDisabledDocuments()
{
    if (User is null)
    {
        return new List<Document>();
    }
    return Documents.Where(d => !d.Users.Any(u => u.Id == User.Id));
}

LINQ запросы оптимизируются, возможно это будет быстрее работать.

→ Ссылка