【问题标题】:LINQ query null reference exceptionLINQ 查询空引用异常
【发布时间】:2011-01-25 02:58:33
【问题描述】:

我有下一个问题:

  var bPermisos = from b in ruc.Permisos
                      where b.IdUsuario == cu.Id
                          select new Permisos(){
                              Id=b.Id,
                              IdUsuario=b.Id,
                              IdPerfil=b.Id,
                              Estatus=b.Estatus
                          };
  var qSisPer = from perm in bPermisos
                      **select new {                    
                          perm.IdPerfil,
                          perm.Cat_Perfil.Nivel,
                          perm.Cat_Perfil.Nombre,   
                          Nombre_Sistem=perm.Cat_Perfil.Cat_Sistema.Nombre**
                      };

并且正在向我抛出异常,请帮助!

【问题讨论】:

  • 请指定抛出异常的行。

标签: linq silverlight exception null


【解决方案1】:

对于初学者,我认为第一个查询可能可以重写为:

var bPermisos = ruc.Permisos.Where(b => b.IdUsuario == cu.Id);

除此之外,还不清楚您的代码在做什么。您似乎在重新规划您已经拥有的结果——获取已知类型的项目并创建一个匿名类型来保存它们。此外,第二个投影正在访问一组未在第一个查询中选择的成员。

【讨论】:

  • Yes 是重用,因为 Permisos 是一个外键为 Cat_Perfil 和 Cat_Usuario 的表,而 Cat_Perfil 有一个 Cat_Sistema 的外键,我想要做的是显示查询 bPermisos 内的 Cat_Perfil 的列但是在这种情况下,使用 Cat_Sistema 而不是 Ids 的名称,请告诉我我是否在写混乱。谢谢!!
  • 好的,问题是当使用select 语句时,您正在创建一个Permiso 类型的新对象,并设置ID 值。该对象没有来自任何其他表或任何属性的数据,除了您指定的那些。您可以使用查询提取该数据,然后 select 聚合(集合属性),(或者不使用 select),或者您可以编写第二个查询针对其他表,传入您从第一个查询中获得的 ID。
  • 好的,现在它带来了数据,谢谢!现在问题是看不到,没有绑定到datagrid,是silverlight的情况,这里可以问一下吗?
  • 当然可以,但是您应该针对该问题创建一个新问题。您可以包含指向此问题的链接以供参考。
【解决方案2】:

这可能是由于以下任何原因造成的:

  • cunull
  • ruc.Permisos 中的一个元素是null,导致b.IdUsuario 出现异常

如果是后者,你可以通过添加:

var bPermisos = from b in ruc.Permisos
                where b != null && b.IdUsuario == cu.Id
                 // ... rest of your code

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2014-07-05
    • 2016-05-11
    • 2023-03-31
    相关资源
    最近更新 更多