我有以下结构,
事件(PARENT)并具有以下字段; ID,EventName
EventProcess(CHILD)具有以下字段; ID EventID(FK),EventProcessName
EventProcessForms(GRANDCHILD)具有以下字段; ID,eventProcessID,FormID
Forms-具有以下字段,ID,FormName
我试图仅返回EventProcess具有存储在EventProcessForms表中的Forms的事件?
如何使用linq返回集合?
感谢您的帮助
答案 0 :(得分:2)
听起来你需要深入两个层次:
events.Where(
e => e.EventProcesses.Any(
ep => ep.EventProcessForms.Any()
)
);
如果其中任何一个属性为null,则更改为:
events.Where(
e => e.EventProcesses != null && e.EventProcesses.Any(
ep => ep.EventProcessForms != null && ep.EventProcessForms.Any()
)
);
如果您只想过滤到具有表单的 Processes ,您将使用foreach
修改Event实体,或者创建新的Event对象选择已过滤的进程:< / p>
events.Select(e=> new Event() {
ID = e.ID,
Name = e.Name,
EventProcesses = e.EventProcesses.Where(
ep => ep.EventProcessForms.Any())
.Where(e=>EventProcesses.Any())
;
答案 1 :(得分:0)
我编辑了我的答案:
using (yourDataContext db = new yourDataContext());
{
var results = db.Event.Where(e -> e.EventProcess.EventProcessForms.count() > 0);
}
答案 2 :(得分: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;
在没有某种实际类的情况下猜测基于...的属性