我是MVC 5 ASP.NET 新手,我需要获取Icollection属性并搜索其他属性,如果打印第一次搜索的结果很好,但是当我去搜索时结果为空。
问题出在哪里?
var userId = User.Identity.GetUserId();
var user = db.Users.Include( u=> u.Sucursales)
.Where(u => u.Id == userId)
.SingleOrDefault();
if( user != null )
{
var sucursal = user.Sucursales.Include(s => s.Emisor)
.Where(s => s.ID == suc)
.SingleOrDefault();
if (sucursal != null)
{
var tipoCfe = sucursal.Emisor.TiposCfe
.Where(t => t.ID == factura)
.SingleOrDefault();
由于您使用的是SingleOrDefault()
,因此您的查询将立即发生,请参阅与SingleOrDefault()相关的StackOverflow问题,不过您的Include(s => s.Emisor)
对我来说很突出。由于获取用户时未包含 Emisor,因此您将无法请求该查询,因为您的查询不再是 IQueryable 类型。您的查询已执行。
为了检索所需的数据,您必须在第一次查询期间获取数据。我会做类似的事情:db.Users.Include("Sucursales.Emisor")
当你检索用户时。
更多关于包含方法...包含方法的 MSDN 说明
我改变了
var user = db.Users.Include( u=> u.Sucursales)
为
var user = db.Users.Include("Sucursales.Emisor")