获取泛型类型的 ICollection 属性

本文关键字:属性 ICollection 泛型类型 获取 | 更新日期: 2023-09-27 18:34:27

我是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();

获取泛型类型的 ICollection 属性

由于您使用的是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")