2014-04-17 29 views
1

我試圖選擇,我有我的字典映射項目在LINQ查詢使用字典裏所含的方法

這是IA想要做

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' 

誰能幫我改正我的一段代碼。

+0

就像錯誤說,要傳遞一個'Enumerator'時,你應該傳遞一個'string'到'.Contains()'方法。 –

+1

爲什麼使用GetEnumerator()?因爲它不返回字符串 –

+0

我認爲,因爲我的「關鍵」是一個字符串,GetEnumerator()會給我一個字符串,然後我可以做比較。 – Navyseal

回答

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) 
2

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