Kei*_*ith 4 c# linq vb.net asp.net linq-to-sql
我有两张桌子:
我想要做的(失败的)是使用LinqDataSource实现GridView搜索,其中搜索返回订单结果,其中任何OrderProduct.Manufacturer列包含搜索查询.
我希望以下内容可行,但似乎lambda表达式在LinqDataSource的Where子句中不起作用(在VB中):
<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>
Run Code Online (Sandbox Code Playgroud)
在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>
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
"orderProduct"类型中不存在属性或字段"op"
关于如何在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>
Run Code Online (Sandbox Code Playgroud)