从多对多关系过滤查询,在Lightswitch中似乎不可能吗?

时间:2014-07-13 17:31:05

标签: vb.net vbscript visual-studio-lightswitch lightswitch-2012

我尝试将此多对多关系查询实现为exemplified here

我有一张员工桌,一个"区"表和员工外部参照区域表。一名员工可以属于多个区域,一个区域可以拥有许多员工。从SQL的角度来看,这是完全合理的,我可以在SSMS中整天加入连接,内部连接,加入这些数据。我无法解决的问题是如何将正确的linq查询附加到正确的屏幕控制,以便能够根据区域选择列表过滤员工列表。 WCF RIA不是我们能够追求的发展方向。

enter image description here

我将以下内容附加到ResponseZone表中,参数为" Employee"类型"整数"

      Private Sub QRYZone_PreprocessQuery(Employee As System.Nullable(Of Integer), ByRef query As System.Linq.IQueryable(Of LightSwitchApplication.ResponseZones))
        query = From q In query
                Where q.xref_EmployeeZonesCollection.Where(Function(u) u.ResponseZones.Id = Employee).Count() > 0
    End Sub

然后我将外部参照实体添加到屏幕并将其绑定到" zone"。它唯一能够完成的是填充员工和区域的所有组合的选择列表,并且不过滤任何内容。显然,我在这里做错了什么,但是我想把头发拉出来试图弄明白什么!

enter image description here

我还尝试了Filter in Many to Many RelationshipMany to Many queriesQueries involving more than one entity没有成功。要么我的架构中有一些不同的东西,这些例子不会合作,或者我错过了一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

向employees表“QRYParameters”添加了一个查询;

添加整数的“ZoneID”作为参数;

            If ZoneID.HasValue Then
            query = query.Where(Function(x) x.xref_EmployeeZonesCollection.Any(Function(y) y.ResponseZones.Id = ZoneID))
        Else
            query = From q In query
                    Select q
        End If

在“搜索员工”屏幕中添加了区域实体(区域列表);

将Employee Grid Qry参数中的“ZoneID”绑定到区域列表中的“ID”;

在屏幕上添加了响应区域选择列表。

它有效。

但是,我希望能够选择多个区域,就此而言,查询预处理器中的vb返回所有区域以解决该问题。