0

我有以下结构,

事件(PARENT)并具有以下字段;ID、事件名称

EventProcess (CHILD) 有以下字段;ID EventID(FK), EventProcessName

EventProcessForms (GRANDCHILD) 有以下字段;ID, eventProcessID, FormID

Forms-具有以下字段,ID,FormName

我试图只返回 EventProcess 具有存储在 EventProcessForms 表中的表单的事件?

我如何使用 linq 返回一个集合?

谢谢你的帮助

4

3 回答 3

2

听起来你需要深入两个层次:

events.Where(
    e => e.EventProcesses.Any(
        ep => ep.EventProcessForms.Any()
        )
    );

如果这些属性中的任何一个可以为空,则更改为:

events.Where(
    e => e.EventProcesses != null && e.EventProcesses.Any(
        ep => ep.EventProcessForms != null && ep.EventProcessForms.Any()
        )
    );

如果您只想过滤到具有表单的流程,您将使用 a 修改事件实体foreach或创建新的事件对象来选择过滤的流程:

events.Select(e=> new Event() {
         ID = e.ID, 
         Name = e.Name, 
         EventProcesses = e.EventProcesses.Where( 
             ep => ep.EventProcessForms.Any())
    .Where(e=>EventProcesses.Any())
    ;
于 2012-09-11T21:53:52.367 回答
0

我编辑了我的答案:

using (yourDataContext db = new yourDataContext());
{    
    var results = db.Event.Where(e -> e.EventProcess.EventProcessForms.count() > 0);
}
于 2012-09-11T21:45:34.110 回答
0

就像是:

var q = from @event in events 
    where @event.EventProcess.EventForms.Count() > 0 
    select @event;

也可以表示为:

    var q = from @event in events
            where @event.EventProcess.EventForms.Any()
            select @event;

猜测没有某种实际类来基于属性......

于 2012-09-11T21:47:34.813 回答