无法读取相关数据LINQ

时间:2014-03-12 17:07:35

标签: c# sql linq entity-framework asp.net-mvc-4

我通过LINQ检索一组记录,其中包含Include语句链,然后是Where。这些记录存储在一个表格中,即Solicitud de AccionN表格(我将其传递给视图),该表格还有另外三个相关表格:Analisis Causal,Plan de Accion&评估Efectividad。

Where语句要求当前登录用户的UserId(ResponsableId)。我要求所有具有UserId负责的Solicitud de Accion记录。因为UserId是表中的一个字段所以我所做的就是要求它。最重要的是,其他三个表 - Analisis Causal,Plan de Accion& Evaluacion Efectividad - 具有相同的字段UserId(ResponsableId)。

我目前的LINQ表达式是:

var sacSolicitudAccion = 
  db.SacSolicitudAccion.Include(s => s.SacResponsables)
                       .Include(s => s.SacAnalisisCausal)
                       .Include(s => s.SacPlanesAccion)
                       .Include(s => s.SacEvalEfectividad)
                       .Where(s => s.SacResponsablesID == idUsuario);

现在真正的问题。我需要向每个Solicitud de Accion展示当前登录的用户和每个Solicitud de Accion,其中用户负责Analisis Causal,Plan de Accion或Evaluacion Efectividad。

我该怎么做?

*重要:Solicitud de Accion与其他三个表有这种关系:

  • Solicitud de Accion有许多Analisis Causal和Analisis Causal有一个Solicitud de Accion),ResponsableId(UserId)是每个表中的一个字段,因此它对于所有表格都是相同的。

2 个答案:

答案 0 :(得分:0)

最后我解决了这个问题。但我必须将整个结构重新设计为ViewModel方法。我走了很长的路,创造了三个相同类型的收藏品,SacSolicitudesAccion,但名字不同。像这样(在VM中):

public ICollection<SacSolicitudAccion> OverdueRequest { get; set; }
public ICollection<SacSolicitudAccion> OverdueRequestByActionPlan { get; set; }
public ICollection<SacSolicitudAccion> OverdueRequestByEfectiveness { get; set; }

我设置了一个包含所有记录的AsQueryable变量,你可能认为它可以带来一些性能问题,但是不要低估LINQ和这个框架的强大功能,事情非常快。通过做

然后我读了每一个SacSolicitudAccion,SacPlanesAccion&amp; SacEvaluacion在该变量中检查它们是否过期并选择SacSolicitudAccion并将其绑定到相应的ViewModel语句。将ViewModel传递给视图需要在视图中进行一些更改,但非常简单,而不是foreach(模型中的var项),现在它是foreach(Model.Entity中的var项)。就这么简单。

然后棘手的部分是管理和重写过滤器,但这是另一个故事。

感谢大家的回答!问候!

答案 1 :(得分:-1)

.Where(s => s.SacResponsablesID == idusuario ||
            s.SacPlanesAccion.SacResponsablesID == idusuario ||
            s.SacEvalEffectividad.SacResponsablesID == iduario);

应该是您的Where条款的替代品,它可以满足您的需求。请注意,您可能不需要所有这些包含,因为如果您的应用程序代码未使用它并且上述内容已转换为SQL,则您不需要将数据点结束。