获取泛型类型的ICollection属性

3

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

1
你能具体说明一下吗?哪个结果是null? - Joonas Koski
suc 的值在哪里设置的,它的值是什么? - dyson
是的,'suc'变量没问题,且s.ID == suc在user.Sucursales中。查询是否可以在if(sucursal != null)之后执行? - Maske
Sucursales的类型是什么,它在User中是如何定义的?你不应该能够执行user.Sucursales.Include,因为它应该是ICollection(或类似)而不是IQueryable - Gert Arnold
2
更多关于include方法的内容,请参考:http://msdn.microsoft.com/zh-cn/library/bb738708%28v=vs.110%29.aspx你可能需要像这样做:db.Users.Include("Sucursales.Emisor") - puddinman13
显示剩余3条评论
2个回答

1

由于使用了SingleOrDefault(),您的查询将立即执行,请参见此StackOverflow问题有关于SingleOrDefault()。但是我认为Include(s => s.Emisor)很突兀。因为在获取用户时未包含 Emisor,所以您将无法请求该信息,因为您的查询不再是IQueryable类型。您的查询已经执行过了。

为了检索所需数据,您必须在第一次查询时获取数据。当您检索用户时,可以采用以下类似的方法:db.Users.Include("Sucursales.Emisor")

更多关于include方法... MSDN Include 方法说明


0

我改变了

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

for

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

3
如果您想使用类型安全的方法,请使用 db.Users.Include(u => u.Sucursales.Select(s => s.Emisor)) - D Stanley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接