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

use*_*382 5 c# linq asp.net entity-framework

我正在尝试根据对象中的WHERE子句获取行DbSet.我有这个:

dbContext.Workers
Run Code Online (Sandbox Code Playgroud)

我可以得到这样的列表:

workers = m.Workers.Where(w => w.BranchId == curUser.BranchId).ToList<Worker>();
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

小智 5

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

workers.SingleOrDerfault(x => x.WorkerId == WorkerId);
Run Code Online (Sandbox Code Playgroud)

如果你将它们全部放在内存中并进行更改,那么你将通过调用.SaveChanges()来保留这些更改.

但是,如果您需要在查询命中数据库之前对IQueryable应用更多过滤,那么您将需要在调用ToList()之前操作IQueryable.