如何建立动态where子句中使用字符串参数

问题描述 投票:0回答:1

我尝试打造专业化的方法来where子句添加到linqToSQL请求(返回iquerable)。我尝试几种方法,但经常使用的ToString,INDEXOF ......但这个结果是SQL请求采取一切元素和LINQ maked过滤器。我看到在SQL Server提供的请求。我想结果做到这一点的方法是,其中包括内部的SQL请求

我在vb.net上的VisualStudio 2017年工作,SQL服务器2016年我的代码

我看到qazxsw船尾一件有趣的事情。但我不能给adapte我的情况

linq dynamic library

但是,我并不需要所有这种复杂的结构。这几年我建立我的事业。但需要升级。在这里我对我的事业代码

 <Extension()> _
    Public Function Where(ByVal source As IQueryable, ByVal predicate As String, ByVal ParamArray values() As Object) As IQueryable
        If source Is Nothing Then Throw New ArgumentNullException("source")
        If predicate Is Nothing Then Throw New ArgumentNullException("predicate")
        Dim lambda As LambdaExpression = DynamicExpression.ParseLambda(source.ElementType, GetType(Boolean), predicate, values)
        Return source.Provider.CreateQuery( _
            Expression.Call( _
                GetType(Queryable), "Where", _
                New Type() {source.ElementType}, _
                source.Expression, Expression.Quote(lambda)))
    End Function

我有错误:Aucune METHODEgénérique“去哪儿”河畔乐型“System.Linq.Queryable” n'est兼容AVEC莱参数德式和les参数fournis。然后我的问题是写正确lambda表达式。我谓词的说法是:列1 LIKE '%AAA%'。我想重写dynamicLinq的方法,在那里接受字符串参数:列1 LIKE“%AAA%” direcxtly

谢谢你的帮助

vb.net dynamic linq-to-sql
1个回答
0
投票

最后,大量的阅读在谷歌和一些感受,当然很多机会之后。

<Extension()>
Public Function Where(ByVal source As IQueryable, ByVal predicate As String) As IQueryable
    Dim param = Expression.Parameter(GetType(String), "x")
    Return source.Provider.CreateQuery(
            Expression.Call(
                GetType(Queryable), "Where",
                New Type() {source.ElementType},
                source.Expression, Expression.Quote(Expression.Lambda(Expression.Constant(predicate), param))))
End Function


Public Function TFOAppliqueFiltreTri(Of T, MaClassDatas As Class)(Origins As IQueryable(Of T), ByVal MesDonnees As TableFullOption.PagerTabEnCours(Of MaClassDatas)) As iqueriable(of T)
    Dim retour As New TableFullOption.LstRetour

    'Colonne de filtre
    Dim strWh As String = ""
    Dim Filtredrecords As IQueryable(Of T)
    For Each Sort In MesDonnees.MesOptions

                Dim colName = Sort.ColName
                If strWh.Length > 0 Then strWh = strWh & " AND "
                strWh = strWh & String.Format(colName & " like '%{0}%'", Sort.Search)

    Next
    If strWh.Length > 0 Then
        Filtredrecords = Origins.Where(strWh) '<- Here call Where
    Else
        Filtredrecords = Origins
    End If



    Return Filtredrecords 
End Function

现在我这产生完全where子句中一个SQL请求动态过滤器

© www.soinside.com 2019 - 2024. All rights reserved.