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

时间:2014-04-17 10:04:09

标签: c# linq

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

这就是我想要做的事情

    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'

任何人都可以帮我纠正我的代码。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

目前尚不清楚您的where条件对您的语义有何看法。我看到两种可能性:

  • 您希望将dc.ColumnName.Contains(...)应用于字典中的每个键,或
  • 您想要针对现有字典键检查dc.ColumnName

我在下面讨论两种情况。

以下是将字符串与一组键匹配的方法:

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

dc.ColumnName将任何键作为其子字符串时,此条件为真。

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

where columnsMappingDictionary.ContainsKey(dc.ColumnName)