EntityDataSource的多个Where参数



我有一个gridview,它使用实体数据源来填充自己。根据什么用户有权看到,我希望gridview实现where子句。在最低级别的访问中,用户只能看到自己。为了做到这一点,我实现了以下代码行:

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

这成功地将gridview中的数据减少到一个适当的用户。如果用户拥有下一步访问权限,他们应该能够看到自己以及为他们工作的所有员工。我已经成功地创建了一个员工Person_ID列表,我正在尝试过滤我的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。参数

我如何正确地创建一个WHERE语句来比较它。gridview的Person_ID到我的列表中称为employeeList的每个元素?

我认为In语句应该可以满足您的需要。像这样-

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

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

当我说我的第一个代码不能工作时,显然我是在撒谎。问题是我没有正确地生成大量的OR语句。

我记得我最初生成的语句是it。Column = ID1 OR ID2 OR ID3,依此类推

如果创建的语句是它。Column = ID1 OR它。Column = ID2 OR它。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

相关内容

  • 没有找到相关文章

最新更新