使用实体框架在DBSet中选择行

本文关键字:选择 DBSet 实体 框架 | 更新日期: 2023-09-27 18:10:38

我试图根据DbSet对象中的WHERE子句获得行。我有这个:

dbContext.Workers

我可以得到这样一个列表:

workers = m.Workers.Where(w => w.BranchId == curUser.BranchId).ToList<Worker>();

但是正如您所看到的,它返回一个List<Worker>,并且我不能对它使用像workers.Find(WorkerId)这样的方法。

基本上,我试图根据一些过滤器返回DBSet,我的意思是我想在DBSet类上使用LINQ。我想要这个,因为我需要使用workers.Find(WorkerId),也许我需要更新这个模型。所以,我将得到一个基于where子句的列表,我将改变一些值并使用dbContext.SaveChanges()。这可能吗?

谢谢

使用实体框架在DBSet中选择行

Where(…)返回一个IQueryable,您可以在查询运行之前操作它。ToList()将强制执行查询并将对象放入内存中。如果你想在查询后"找到"一个项目,那么你可以用List做这样的事情:

workers.SingleOrDerfault(x => x.WorkerId == WorkerId);

如果你像这样在内存中拥有它们,并且做了更改,那么你将通过调用。savechanges()来持久化这些更改。

然而,如果你需要在查询到达数据库之前对IQueryable应用更多的过滤,那么你就需要在调用ToList()之前对IQueryable进行操作。