【问题标题】:Where clause on dynamic column name in LINQ query?LINQ查询中动态列名的where子句?
【发布时间】:2012-07-04 15:21:06
【问题描述】:

我在我的数据库的表中创建了一个包含一些列名的下拉列表。当用户选择列名时,我想在查询中添加 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

【问题讨论】:

标签: sql vb.net linq where-clause


【解决方案1】:

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

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)

【讨论】:

  • 我已经尝试过了,但我会收到一条警告说它在运行时无法正确投射,请参阅上面的原始消息以获取我的新代码。
  • 您不需要使用Function(wc) 声明,它只是一个string 传递到动态LINQ .Where 子句中。
  • 当我只传递一个字符串时,我的 Visual Studio 会直接警告我这个函数不接受那么多参数。链接中的示例是 C# 是猜测,我在 VB 中工作。
  • 例子是C#和VB。除非您包含动态 LINQ 库并在顶部包含命名空间,否则 Visual Studio 将无法识别它。文章的一半是一个基本 VB 演示的链接。 scottgu.com/blogposts/dynquery/dynamiclinqvb.zip
  • 啊,太好了!我认为它应该与本机库一起使用。现在开始工作了,真高兴!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2015-11-21
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多