微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 如何使用LINQ查找ResultPropertyCollection中的任何值是否包含某个子字符串?

如何使用LINQ查找ResultPropertyCollection中的任何值是否包含某个子字符串?

背景:在重新命名我的雇主公司后,我想检查所有用户是否都有一个正确的新电子邮件别名,这些别名在Active Directory中列为proxyAddresses.
直接访问ResultPropertyCollection中的单个值可以正常工作,如下所示:

DirectorySearcher mySearcher = new DirectorySearcher(mySearchRoot,myFilter,myPropertiesList);
myResults = mySearcher.FindAll();

var query = from SearchResult myResult in myResults
    where (myResult.Properties["proxyAddresses"][0].ToString().Contains ("WeNeedThis.com"))
    select myResult;

但是我在搜索集合中的所有值时失败了.我似乎无法找出范围变量的正确类型是什么:

where (from WhatType? myAddress in myResult.Properties["proxyAddresses"] 
    where (myAddress.Contains("WeNeedThis.com"))    
    select myAddress)

如何设置where子句,以便在任何valueAddresses值中找到搜索字符串的任何出现?

答案:原来这是正确的where子句:

where ( ( from String myAddress in myResult.Properties["proxyAddresses"]
       where myAddress.Contains("WeNeedThis.com") 
       select myAddress).ToList().Count == 0)

交织在一起有两个错误:外部where子句需要内部选择结果的布尔结果,这是通过.ToList()实现的.Count == 0.
范围变量的类型确实是String = myResult.Properties [“proxyAddresses”] [0] .GetType(),尽管Collection没有直接的String成员.我误解了生成的编译器错误.

解决方法

你想要的类型我认为是 ResultPropertyValueCollection.

但是,你不能省略类型和使用类型推断吗?

from myAddress in myResult.Properties["proxyAddresses"]

也代替使用IndexOf(str)> 0作为谓词,你可以使用Contains(str).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐