我通过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与其他三个表有这种关系:
答案 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,则您不需要将数据点结束。