C# ASP.NET-LinqDataSource中的高级Where子句
我有两张桌子: 命令 OrderProducts-订单可以有1到多个与之关联的OrderProducts记录。 我尝试使用LinqDataSource实现GridView搜索,但没有成功,在该搜索中,如果OrderProduct.Manufacturer列中的任何列包含搜索查询,则返回订单结果 我希望下面的内容能够起作用,但是在VB中,lambda表达式在LinqDataSource的Where子句中似乎不起作用:C# ASP.NET-LinqDataSource中的高级Where子句,c#,asp.net,vb.net,linq,linq-to-sql,C#,Asp.net,Vb.net,Linq,Linq To Sql,我有两张桌子: 命令 OrderProducts-订单可以有1到多个与之关联的OrderProducts记录。 我尝试使用LinqDataSource实现GridView搜索,但没有成功,在该搜索中,如果OrderProduct.Manufacturer列中的任何列包含搜索查询,则返回订单结果 我希望下面的内容能够起作用,但是在VB中,lambda表达式在LinqDataSource的Where子句中似乎不起作用: <asp:LinqDataSource ID="dsOrders"
<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>
谢谢你的回答。这真的帮了我大忙 这也可以在代码中完成。这样就可以添加逻辑,只包含需要的字段。应该是这样的:
Protected Sub dsOrders_Selecting(sender As Object, e As LinqDataSourceSelectEventArgs) Handles dsOrders.Selecting
Dim searchTerm = txtSearchTerm.Text.Trim()
dsOrders.Where += " orderProducts.Any(Manufacturer.Contains(""" + searchTerm + """)) "
End Sub
我不确定这是否对任何人都有帮助,但在综合了之前的所有文章之后,我在转换为包含的字符串后仍然不断出现错误 我的名字和姓氏字段显然是字符串,但EntityID是Int32。我已经设置了这些控制参数,以便从网页上的文本框中获取要搜索的值,但仍然不断获取Int32字符串方法错误 这是对我有用的东西
<asp:LinqDataSource ID="LDSCandidateEdit" runat="server" ContextTypeName="ATSIntake.ATSIntakeDataContext" EntityTypeName="" TableName="Candidates"
EnableDelete="True" EnableInsert="True" EnableUpdate="True"
Where='(FirstName.Contains(@searchTermF)) and (LastName.Contains(@searchTermL)) and (Convert.ToString(EntityID).Contains(@searchTermCID))'>
<WhereParameters>
<asp:ControlParameter Name="searchTermF" ControlID="txtFirstNameSearch" DefaultValue="" ConvertEmptyStringToNull="false" />
<asp:ControlParameter Name="searchTermL" ControlID="txtLastNameSearch" DefaultValue="" ConvertEmptyStringToNull="false" />
<asp:ControlParameter Name="searchTermCID" ControlID="txtCandidateIDSearch" DefaultValue="" ConvertEmptyStringToNull="false"/>
</WhereParameters>
</asp:LinqDataSource>
你能分享一下语法的来源以供参考吗。。如何为关系(如DataContenxt.Users.where u=>u.UserPackages.Anyp=>p.Status==Subscription Actives)编写这些where原因和其他原因。对于任何比我在原始答案中提到的更高级的内容,您始终可以覆盖LinqDataSource实例的Selecting事件,并完全控制您需要的确切数据。@Keith您能帮我回答这个问题吗: