我尝试打造专业化的方法来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
谢谢你的帮助
最后,大量的阅读在谷歌和一些感受,当然很多机会之后。
<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请求动态过滤器