0

我正在尝试实现这里举例说明的多对多关系查询。

我有一个员工表、一个“区域”表和一个员工外部参照区域表。一个员工可以属于多个区域,一个区域可以有多个员工。从 SQL 的角度来看,这是非常有意义的,我可以整天在 SSMS 中离开连接、内连接,不管这些数据。我无法理解的是如何将正确的 linq 查询附加到正确的屏幕控件,以便能够根据区域选择列表过滤员工列表。WCF RIA 不是我们能够追求的发展方向。

在此处输入图像描述

我将以下内容附加到 ResponseZone 表中,参数“Employee”的类型为“Integer”

      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

然后我将外部参照实体添加到屏幕并将其绑定到“区域”。它唯一完成的是填充员工和区域的所有组合的选择列表,并且不过滤任何内容。显然我在这里做错了什么,但我正在拔头发试图弄清楚是什么!

在此处输入图像描述

我还尝试过在多对多关系多对多查询涉及多个实体的查询中过滤但没有成功。要么我的架构中有一些不同的东西,这些示例无法使用,要么我错过了一些非常明显的东西。

4

1 回答 1

0

向员工表“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

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

将员工网格 Qry 参数中的“ZoneID”绑定到区域列表中的“ID”;

将响应区域选择列表添加到屏幕。

它有效。

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

于 2014-07-14T00:15:02.557 回答