获取泛型类型的ICollection属性

时间:2014-12-16 20:13:54

标签: c# linq asp.net-mvc-5 icollection

我是ASP.NET MVC 5中的新手,我需要获取Icollection属性并搜索到其他属性,如果打印第一次搜索的结果很好,但是当我去搜索结果时是null

问题是什么?

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

2 个答案:

答案 0 :(得分:1)

您的查询将在您使用SingleOrDefault()后立即进行,请参阅this StackOverflow question pertaining to SingleOrDefault()您的Include(s => s.Emisor)会对我说明。由于在获取用户时未包含Emisor,因此您将无法请求,因为您的查询不再是IQueryable类型。您的查询已被执行。

为了检索您需要的数据,您必须在第一次查询期间获取数据。当你检索用户时,我会做类似的事情:db.Users.Include("Sucursales.Emisor")

有关包含方法的更多信息... MSDN Explanation of Include Method

答案 1 :(得分:0)

我改变了

var user = db.Users.Include( u=> u.Sucursales)

var user = db.Users.Include("Sucursales.Emisor")