利用筛选器描述符,模型的使用者可以在方法执行之前将值传递到方法。有关更多信息,请参见设计业务数据连接模型。
一种常见方案是:SharePoint 中的用户希望检索与某个条件匹配的外部内容类型的实例。可通过向 Finder 方法中添加筛选器描述符来支持此方案。
向 Finder 方法中添加筛选器描述符
在**“BDC 方法详细信息”窗口中,展开 Finder 方法的节点,展开“参数”**节点,然后添加输入参数。有关更多信息,请参见如何:向方法添加参数。
在方法的详细信息窗口中,选择该参数的类型说明符。
在菜单栏中,选择视图, 属性窗口。
在**“属性”窗口中,将“类型名称”**属性设置为适合于筛选器的数据类型。
例如,筛选器可能使用订单日期来限制方法返回的销售订单数。若要支持该筛选器,类型描述符的**“类型名称”**属性必须设置为 System.DateTime。
在**“方法详细信息”窗口中,展开“筛选器描述符”**节点。
在添加筛选器描述符 列表中,选择 创建筛选器描述符。
**“筛选器描述符”**节点下将出现一个新的筛选器描述符。
在菜单栏中,选择视图, 属性窗口。
在属性 窗口中,选择 类型属性。
在列表中所显示的类型属性,选择所需的筛选模式。
例如,要创建一个筛选器,用于限制在查找程序方法中返回的销售订单的订单日期,请选择比较。比较筛选器可确保查找程序方法返回仅显示符合特定条件的实例。有关每种筛选模式的更多信息,请参见 Types of Filters Supported by the BDC(BDC 支持的筛选器的类型)。
在属性 窗口中,选择 关联的类型说明符属性。
在列表中所显示的关联的类型说明符属性,选择前面的步骤中创建的类型说明符。这样会将筛选器与 Finder 方法的输入参数相关。
向 Finder 方法中添加返回数据的代码。您可以使用输入参数作为 Select 查询中的条件。
下面的示例返回具有指定订单日期的销售订单。
说明
用您的服务器名称替换 ServerName 字段的值。
Public Shared Function ReadList(ByVal OrderDateParam As DateTime) As IEnumerable(Of SalesOrderHeader) Const ServerName As String = "MySQLServerName" Dim dataContext As AdventureWorksDataContext = _ New AdventureWorksDataContext("Data Source=" & ServerName & _ ";Initial Catalog=AdventureWorks;Integrated Security=True") Dim NoValuePassedIn As DateTime = Convert.ToDateTime("1/1/1900 12:00:00 AM") Dim DefaultDateTime As DateTime = Convert.ToDateTime("2001-09-01 00:00:00.000") ' If the user does not provide a value for the filter. If OrderDateParam = NoValuePassedIn Then ' Use a default date time value. OrderDateParam = DefaultDateTime End If Dim SalesOrderHeader As IEnumerable(Of SalesOrderHeader) = _ From SalesOrderHeaders In dataContext.SalesOrderHeaders _ Where SalesOrderHeaders.OrderDate = OrderDateParam _ Select SalesOrderHeaders Return SalesOrderHeader End Function
public static IEnumerable<SalesOrderHeader> ReadList(DateTime OrderDateParam) { const string ServerName = "MySQLServerName"; AdventureWorksDataContext dataContext = new AdventureWorksDataContext ("Data Source=" + ServerName + ";" + "Initial Catalog=AdventureWorks;Integrated Security=True"); DateTime NoValuePassedIn = Convert.ToDateTime("1/1/1900 12:00:00 AM"); DateTime DefaultDateTime = Convert.ToDateTime("2001-09-01 00:00:00.000"); // If the user does not provide a value for the filter. if (OrderDateParam == NoValuePassedIn) { // Use a default date time value. OrderDateParam = DefaultDateTime; } IEnumerable<SalesOrderHeader> SalesOrderHeader = from salesOrderHeaders in dataContext.SalesOrderHeaders where salesOrderHeaders.OrderDate == OrderDateParam select salesOrderHeaders; return SalesOrderHeader; }