是否可以将“按示例查询”主体的条件设置为不喜欢而不是 LIKE ?
与方法类似:
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Name= "Mario";
这将返回名为“Mario”的所有用户。
是否可以创建一个条件来获取所有未命名为“Mario”的用户?
这样的事情:
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Name != "Mario";
所有用户名不是“Mario”的用户。
答案 0 :(得分:1)
不,但是你可以获得所有用户。然后使用linq过滤它们。
UserPrincipal qbeUser = new UserPrincipal(ctx);
PrincipalSearcher pSearch = new PrincipalSearcher(qbeUser);
PrincipalSearchResult<Principal> pResult = pSearch.FindAll();
var notMario = (from u in pResult
where u.Name != "Mario"
select u);
然后取决于你想做什么
foreach (Principal p in notMario) {
// Do Somthing
}
答案 1 :(得分:1)
这可以通过扩展UserPrincipal类来实现:
[DirectoryRdnPrefix("CN")]
[DirectoryObjectClass("Person")]
public class UserPrincipalEXT : UserPrincipal
{
// Inplement the constructor using the base class constructor.
public UserPrincipalEXT(PrincipalContext context)
: base(context)
{ }
// Implement the constructor with initialization parameters.
public UserPrincipalEXT(PrincipalContext context,
string samAccountName,
string password,
bool enabled)
: base(context, samAccountName, password, enabled)
{ }
// Create the "employeeType" property with the "!" for NOT LIKE.
[DirectoryProperty("!employeeType")]
public string NotLikeEmployeeType
{
get
{
if (ExtensionGet("!employeeType").Length != 1)
return string.Empty;
return (string)ExtensionGet("!employeeType")[0];
}
set { ExtensionSet("!employeeType", value); }
}
// Implement the overloaded search method FindByIdentity.
public static new UserPrincipalEXT FindByIdentity(PrincipalContext context, string identityValue)
{
return (UserPrincipalEXT)FindByIdentityWithType(context, typeof(UserPrincipalEXT), identityValue);
}
// Implement the overloaded search method FindByIdentity.
public static new UserPrincipalEXT FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
{
return (UserPrincipalEXT)FindByIdentityWithType(context, typeof(UserPrincipalEXT), identityType, identityValue);
}
}
重要的是要理解:
// Create the "employeeType" property.
[DirectoryProperty("!employeeType")]
public string NotLikeEmployeeType
{
get
{
if (ExtensionGet("!employeeType").Length != 1)
return string.Empty;
return (string)ExtensionGet("!employeeType")[0];
}
set { ExtensionSet("!employeeType", value); }
}
鉴于&#34; DirectoryProperty&#34;使用ExtensionGet和ExtensionSet创建条件时属性(本例中为NotLikeEmployeeType)不为空,可以添加&#34;!&#34;在AD属性之前(在这种情况下为employeeType)。
这是我们使用扩展程序的方式:
UserPrincipalEXT qbeUser = new UserPrincipalEXT(ctx);
qbeUser.NotLikeEmployeeType = "exclude";
现在返回的条件是:
!employeeType = exclude
这正是我们想要的!不喜欢 ! :)
而且,关于扩展的好处是,您可以将AD属性添加到通常不会公开的类(例如employeeType)