在Contains方法内部的linq查询中使用Dictionary

本文关键字:Dictionary 查询 linq Contains 方法 内部 | 更新日期: 2023-09-27 17:58:55

我正在尝试选择字典中有映射的项目

这就是我想做的

    var columnsMapping = (from dc in sourceTable.Columns.Cast<DataColumn>()
                          where dc.ColumnName.Contains(columnsMappingDictionary.Keys.GetEnumerator())
                          select new
                          {
                              columnName = dc.ColumnName,
                              columnType = dc.DataType
                          }).ToDictionary(key => key.columnName, value => value.columnType);

我的字典是(字符串,字符串)类型的。

我一直收到这个错误

The best overloaded method match for 'string.Contains(string)' has some invalid arguments
cannot convert from 'System.Collections.Generic.Dictionary<string,string>.KeyCollection.Enumerator' to 'string'

有人能帮我纠正我的代码吗。

在Contains方法内部的linq查询中使用Dictionary

不清楚您对where条件有什么语义。我看到两种可能性:

  • 要将dc.ColumnName.Contains(...)应用于字典中的每个关键字,或者
  • 您想要对照现有字典密钥检查CCD_ 3

下面我将讨论这两种情况。

以下是如何将字符串与一组密钥进行匹配:

where columnsMappingDictionary.Keys.Any(key => dc.ColumnName.Contains(key))

dc.ColumnName具有任何键作为其子字符串时,此条件成立。

以下是如何检查columnsMappingDictionary:的密钥中是否存在dc.ColumnName

where columnsMappingDictionary.ContainsKey(dc.ColumnName)

反之亦然:where columnsMappingDictionary.Keys.Contains(dc.ColumnName))