在继承详细信息表

时间:2017-09-08 17:12:00

标签: linq asp.net-mvc-5 filtering

我有一张主表:进程。 进程有一个名为:Movements的详细子表。 运动的一个鉴别者被命名为:分配。 它有一个名为Number的字段。 我需要过滤具有Movements-> Distribution-> Number的流程,例如'%123%'。

我尝试过:

IEnumerable<Process> filtereds = db.Processes
                .Include(s => s.Movements)
                .Where(sm => sm.Number.Contains("%123%"))

我被警告说,号码不存在。我认为这是因为Number是一个分配领域,是运动的一个孩子。

然后我尝试了:

IEnumerable<Process> filtereds = db.Processes
                    .Include(s => s.Movements)
                    .OfType(Distribution)
                    .Where(sm => sm.Number.Contains("%123%"))

我被警告说,分发在这种情况下无效。

然后我发现:

IEnumerable<Process> filtereds = db.Processes
                        .Include(s => s.Movements)
                        .OfType<Distribution>()
                        .Any(c => c.Number.Contains("123")));

但是当我运行两个过滤器参数时:

IEnumerable<Process> filtereds = db.Processes
.Include(c => c.Customers
.Include(s => s.Movements)

filtereds = filtereds 
.Where(sc => sc.Movements.OfType<Distribution>().Any(c => c.Number.Contains(model.Nbr)));

filtereds = filtereds 
.Where(sc => sc.Customer.Any(cl => cl.Customer.Name.Contains(model.Customer)));

第一个正确运行。 但第二次回归: “已经有一个与此命令关联的开放DataReader必须先关闭。”

1 个答案:

答案 0 :(得分:0)

如果它位于辅助表中,您应该能够包含<ul> <li> <a href="#">parent</a> </li> <ul> <li> <a href="#">level1</a> <ul> <li> <a href="#">level2</a> </li> </ul> </li> </ul> </ul>

Distribution

我不确定您是否需要先db.Processes .Include(p => p.Movements.Distribution) .Where(p => p.Movements.Any(pm => pm.Distribution.Any(pmd => pmd.Number.Contains("123")))