我有两个列表:
public static List<string> SalesAuthorityListFromFiles = new List<string>();
public static List<(string UserName, string LegalCompany, string SalesAuthorities)> ListOfSalesAuthorities = new List<(string UserName, string LegalCompany, string SalesAuthorities)>();
我正在尝试建立新列表以获取“已删除的销售权限”:
var SalesAuthorityThatNotMatch = SalesAuthorityListFromFiles.Where(x => !ListOfSalesAuthorities.Contains(x)).ToList();
我遇到一个指向x
的错误,我理解为什么,但是我不确定该如何解决:
严重性代码描述项目文件行抑制状态 错误CS1503参数1:无法从'字符串'转换为'(字符串 用户名,字符串LegalCompany,字符串SalesAuthorities)'
我需要将string UserName, string LegalCompany, string SalesAuthorities
连接到一个字符串以便与SalesAuthorityListFromFiles
的值进行比较:
string.Format(@"{0} / {1} : {2}.00 €", UserName, LegalCompany, SalesAuthorities)
但是如何与SalesAuthorityListFromFiles
中的值进行比较?
答案 0 :(得分:6)
将Contains
更改为Any
,然后可以在比较之前格式化每个元组:
var salesAuthorityThatNotMatch = SalesAuthorityListFromFiles
.Where(x => !ListOfSalesAuthorities
.Any(y => $"{y.UserName} / {y.LegalCompany} : {y.SalesAuthorities}.00 €" == x))
.ToList();
您也可以创建一个HashSet<string>
格式的元组,这将使用更多的内存,但会提高LINQ查询的效率:
var salesAuthoritiesFormatted = ListOfSalesAuthorities
.Select(y => $"{y.UserName} / {y.LegalCompany} : {y.SalesAuthorities}.00 €")
.ToHashSet();
然后HashSet<string>.Contains
将在O(1)
时间复杂度下工作:
var salesAuthorityThatNotMatch = SalesAuthorityListFromFiles
.Where(x => !salesAuthoritiesFormatted.Contains(x))
.ToList();