gpt4 book ai didi

c# - ASP.NET - LinqDataSource 中的高级 Where 子句

转载 作者:太空狗 更新时间:2023-10-30 00:28:06 25 4
gpt4 key购买 nike

我有两个表:

  1. 订单
  2. OrderProducts - 一个订单可以有 1 到多个与之关联的 orderProducts 记录。

我想做的(未成功)是使用 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>

在 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>

我得到的错误是:

No property or field 'op' exists in type '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>

关于c# - ASP.NET - LinqDataSource 中的高级 Where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3991424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com