LINQ。为什么只在第一次满载?

LINQ. Why full load only the first time?

我有一个实体 ContractsListKindWorksKindWorks

public partial class Contracts
{
    public Contracts()
    {
        ListKindWorks = new HashSet<ListKindWorks>();
    }

    public int Id { get; set; }
    ...
    public virtual ICollection<ListKindWorks> ListKindWorks { get; set; }
}

public partial class ListKindWorks
{
    public int IdContract { get; set; }
    public int IdKindWork { get; set; }

    public virtual Contracts IdContractNavigation { get; set; }
    public virtual KindWorks IdKindWorkNavigation { get; set; }
}

public partial class KindWorks
{
    public KindWorks()
    {
        ListKindWorks = new HashSet<ListKindWorks>();
    }

    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<ListKindWorks> ListKindWorks { get; set; }
}

和classItem

public class Item
{
    public int Id { get; set; }
    public string Value { get; set; }
}

我想通过方法加载相关元素 Load():

source = model.Contracts
    .OrderByDescending(r => r.Id)
    .Skip(Page * Size)
    .Take(Size)
    .Select(c => new ContractTableRow
    {
        IdContract = c.Id,
        FullName = c.WorkerNavigation.FullName,
        IdWorker = c.Worker,
        ...

        // this code
        KindWork = c.ListKindWorks
        .Select(y => new Item 
        { Id = y.IdKindWork, Value = y.IdKindWorkNavigation.Short })
        .ToList(),

        Subject = c.ListSubjects
        .Select(y => new Item
        { Id = y.IdSubject, Value = y.IdSubjectNavigation.Short })
        .ToList()
    })
    .ToList();

方法 Load() 的第一次调用(在加载应用程序期间)给出了完整的元素。 KindWorkSubject 不为空。但是当我更改 Page 时,KindWorkSubject 是空的。其余的总是在变化。

为什么后续调用不加载这部分?

将变量源用作 IQueryable,这样每次使用 .ToList() 查询时都会针对数据库执行查询,这样您就会得到更改后的数据。

IQueryable<Contracts> source = *...* // without .ToList()

这会将其保存为查询(没有数据,因为它尚未在数据库上执行)

每次调用 .ToList() 时,EF 都会在 sql.

上执行
var smth = source.ToList();