Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-LinqDataSource中的高级Where子句_C#_Asp.net_Vb.net_Linq_Linq To Sql - Fatal编程技术网

C# ASP.NET-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"

我有两张桌子:

命令 OrderProducts-订单可以有1到多个与之关联的OrderProducts记录。 我尝试使用LinqDataSource实现GridView搜索,但没有成功,在该搜索中,如果OrderProduct.Manufacturer列中的任何列包含搜索查询,则返回订单结果

我希望下面的内容能够起作用,但是在VB中,lambda表达式在LinqDataSource的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>

谢谢你的回答。这真的帮了我大忙

这也可以在代码中完成。这样就可以添加逻辑,只包含需要的字段。应该是这样的:

    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您能帮我回答这个问题吗: