LINQ查询中关于动态列名的Where子句?

时间:2012-07-04 15:21:07

标签: sql vb.net linq where-clause

我在db中的表中创建了一个包含一些列名的下拉列表。当用户选择列名时,我想在查询中添加where子句以使用此过滤器。

我要做的是:

Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc)

'if dropdown has value...

objQuery = objQuery.Where(Function(wc) wc.DynamicColumnName < txtFilterValue1.Text)

wc.DynamicColumnName必须替换为例如wc.Price。

-

在回复之后我现在尝试的代码是:

    Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc)

        If ddlFilterColumn1.SelectedValue <> "" And ddlFilterOperator1.SelectedValue <> "" And txtFilterValue1.Text <> "" Then

            Select Case ddlFilterOperator1.SelectedValue
                Case "..%"
                    objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id Like txtFilterValue1.Text & "%")
                Case "%.."
                    objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id Like "%" & txtFilterValue1.Text)
                Case Else '< > = <>
                    'objQuery = objQuery.Where(Function(wc) wc.WHMCSClient_id < txtFilterValue1.Text)
                    'objQuery = objQuery.Where(Function(wc) "wc." + ddlFilterColumn1.SelectedValue.ToString + " < " + txtFilterValue1.Text)
                    objQuery = objQuery.Where(Function(wc) "wc.WHMCSClient_id < 500")
            End Select

        End If

    Response.Write(objQuery.ToString())

但我收到以下错误(原始错误在荷兰语,但它说如下): 字符串wc.WHMCSClient_id&lt; 500到类型布尔值无效。

1 个答案:

答案 0 :(得分:2)

这是一篇相当古老的文章,但我认为它仍然可行

一段时间后,Scott Gu发布了关于动态LINQ库的文章,它基本上允许您使用字符串以“LINQ”类型格式查询集合。,例如:

Dim objQuery = (From wc In _dbBellen.dealer_telefonies Order By wc.Bedrijfsnaam Select wc)

// if dropdown has value...
Dim result = objQuery.Where("MyColumnName < " + txtFilterValue1.Text);

以下是完整文章的链接:Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)