EntityDataSource上的多个Where参数?

时间:2014-08-11 17:55:30

标签: asp.net vb.net gridview entitydatasource

我有一个gridview,它使用实体数据源来填充自己。根据用户有权查看的内容,我希望gridview实现where子句。在最低访问级别,用户只能看到自己。为此,我实现了代码行:

EmployeeEntityDataSource.Where = "it.Person_ID = " + selectQuery.ToString()

这成功地将gridview中的数据减少到适当的用户。如果用户具有访问的下一步,他们应该能够看到自己以及为他们工作的所有员工。我已经成功创建了一个员工Person_IDs列表,并且我试图过滤我的gridview,这样如果gridview中的Person_ID列与我列表中的一个Person_ID匹配,它就会显示出来。

我尝试过以下几段代码:

1

For Each employeeID In employeeList
    If count2 <> count Then
        whereString += "it.Person_ID = " + employeeID.ToString() + " OR "
        count2 += 1
    Else
        whereString += "it.Person_ID = " + employeeID.ToString()
    End If
Next

EmployeeEntityDataSource.Where = whereString

基本上我认为我可以使用一堆OR创建一个巨大的where语句,但这不起作用

2

EmployeeEntityDataSource.WhereParameters.Add(employeeList)
EmployeeEntityDataSource.Where = "it.Person_ID = @employeeList"

我在这里得到的错误说一个List(of T)无法转换WebControl.Parameter

如何正确创建WHERE语句,将gridview的it.Person_ID与名单employeeList中的每个元素进行比较?

2 个答案:

答案 0 :(得分:0)

我认为In语句应该能够满足您的需求。像这样的东西 -

string employeeIDs = string.Join(",", employeeList.ToList());
EmployeeEntityDataSource.Where = String.Format("it.Person_ID IN ({0})", employeeIDs);

或者您可能必须遍历列表以创建employeeIDs字符串,具体取决于我们在此处理的类型。

答案 1 :(得分:0)

显然我说谎当我说我的第一段代码不起作用时。问题是我没有正确地生成大量的OR语句。

从我记忆中我最初生成的语句是it.Column = ID1或ID2或ID3等等。

如果创建的语句是it.Column = ID1或it.Column = ID2或it.Column = ID3,依此类推,这将创建一个正常运行的语句。

我当前项目中的代码是:

For Each employee In employeeList
    If count2 <> count Then
        whereString += "it.Person_ID = " + employee.ToString() + " OR "
        count2 += 1
    Else
        whereString += "it.Person_ID = " + employee.ToString()
    End If
Next

EmployeeEntityDataSource.Where = whereString