我有两张桌子:
命令
OrderProducts—一个订单可以有1到多个与之关联的OrderProducts记录。
我要做的(失败的)是使用linqdatasource实现gridview搜索,其中搜索返回orderproduct.manufacturer列包含搜索查询的订单结果。
我希望下面的语句可以工作,但是lambda表达式似乎不能在linqdatasource(在vb中)的where子句中工作:
<asp:LinqDataSource ID="dsOrders" runat="server" ContextTypeName="myDataContext" TableName="orders"
Where="orderProducts.Any(Function(op) op.Manufacturer.Contains(@searchTerm))">
<WhereParameters>
<asp:ControlParameter Name="searchTerm" ControlID="txtSearchTerm" DefaultValue="" />
</WhereParameters>
</asp:LinqDataSource>
在c中,它看起来像:
<asp:LinqDataSource ID="dsOrders" runat="server" ContextTypeName="myDataContext" TableName="orders"
Where="orderProducts.Any(op => op.Manufacturer.Contains(@searchTerm))">
<WhereParameters>
<asp:ControlParameter Name="searchTerm" ControlID="txtSearchTerm" DefaultValue="" />
</WhereParameters>
</asp:LinqDataSource>
我得到的错误是:
没有属性或字段“OP”存在于
键入“orderproduct”
关于如何在linqdatasource定义中实现此功能的任何线索,或者我必须处理并设置自定义onselecting事件吗?
最佳答案
我想出来了。我直到现在才意识到这一点,但显然linqdatasource select/where/etc子句使用的语法与标准linq不同。我只需要做下面的事情(包括其他的清理工作)。希望这对将来的其他人有帮助:
<asp:LinqDataSource ID="dsOrders" runat="server" ContextTypeName="myDataContext" TableName="orders"
Where='@searchTerm = "" OR Convert.ToString(orderID) = @searchTerm OR orderProducts.Any(Manufacturer.Contains(@searchTerm))'>
<WhereParameters>
<asp:ControlParameter Name="searchTerm" ControlID="txtSearchTerm" DefaultValue="" ConvertEmptyStringToNull="false" />
</WhereParameters>
</asp:LinqDataSource>