我有一个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中的每个元素进行比较?
答案 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