我有一个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