我尝试将此多对多关系查询实现为exemplified here。
我有一张员工桌,一个"区"表和员工外部参照区域表。一名员工可以属于多个区域,一个区域可以拥有许多员工。从SQL的角度来看,这是完全合理的,我可以在SSMS中整天加入连接,内部连接,加入这些数据。我无法解决的问题是如何将正确的linq查询附加到正确的屏幕控制,以便能够根据区域选择列表过滤员工列表。 WCF RIA不是我们能够追求的发展方向。
我将以下内容附加到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"。它唯一能够完成的是填充员工和区域的所有组合的选择列表,并且不过滤任何内容。显然,我在这里做错了什么,但是我想把头发拉出来试图弄明白什么!
我还尝试了Filter in Many to Many Relationship,Many to Many queries和 Queries involving more than one entity没有成功。要么我的架构中有一些不同的东西,这些例子不会合作,或者我错过了一些非常明显的东西。
答案 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返回所有区域以解决该问题。