2010-06-28 40 views
0

我有一個字典>搜索字符串在C#在C#中使用LINQ

Dictionary<string,List<string>> l_dictRawData; 

其中包含的值是:

   KEYS     VALUES 
    l_dictRawData["TamilNadu"] => VALUE[0] = "Chennai" VALUE[1] = "Madurai" 
    l_dictRawData["Andhra"] = > VALUE[0] = "Hyderabad" VALUE[1] = "Secundarabad" 
    l_dictRawData["Karnataka"] = > VALUE[0] = "mysore" VALUE[1] = "Bangalore" 

然後我有InputList

List<string> l_lstInput = new List<string>(); 

哪包含的數據有:

l_lstInput[0] = "Hyderabad" 
    l_lstInput[1] = "Secundarabad" 

結果將是(如果)字典l_dictRawData同時包含 「Hyderabad」和「Secundarabad」,則選擇KEy值。

string l_strOutPut = "Andhra"; 

這裏是我的代碼:

      var Query = from l_strData in l_dictRawData 
          from l_strItem in l_lstInput 
          where l_strData .Value.Contains(l_strItem) 
          select new 
          { 
           CityName = l_strItem, 
           StateName = l_strData.Key 
          }; 

我怎樣才能在C#中使用LINQ的輸出中

如果妳有任何疑問,PLZ讓我知道

+2

Plz發送codz?不用了,謝謝。 – 2010-06-28 10:36:37

回答

3

好了,Dictionary的值中尋找的內容對於此並不是一個合適的數據結構,但您可以這樣做:

var query = from pair in l_dictRawData 
      where pair.Value.SequenceEquals(l_lstInput) 
      select pair.Key; 

這會給全部與給定值匹配的鍵。根據您的要求,您可以使用query.First(),query.FirstOrDefault(),query.Single()query.SingleOrDefault()之一獲得單個結果。

+0

謝謝....我得到了結果 - Rajesh – user374191 2010-06-28 11:03:04

+0

飛碟:你能告訴我哪個數據結構適合上述問題 – user374191 2010-06-28 11:06:00

+0

@ user374191:如果你想從*這對值中查找*,我'd建議一個'Dictionary ,string>',這樣你的一對值就是字典中的關鍵字。 – 2010-06-28 11:08:50

0

我沒有測試過,但你會發現,這個工程或者是足夠接近修正你的需求:

var matches = (
from kvPair in l_dictRawData 
where l_lstInput.Contains(kvPair.Value) 
where l_lstInput.Contains(kvPair.Key) 
select new { 
MatchedVal = kvPair.Value 
} 
).ToList(); 

這將從字典返回所有的鍵值在字典項目中同時包含存在於你的l_lstInput集合中的元素。

+0

@ user374191:我已經爲您的原始問題提供瞭解決方案,然後您隨後更新了您的問題。這很令人沮喪,我是否必須不斷更新我的答案,因爲你沒有花時間正確解釋你的問題每次? – 2010-06-28 10:41:48

0

對於包含選項,我們也應該考慮字符串 的情況,例如,看下面

searchUserName = searchUserName.ToLower(); 
      var results = orgUserEmailSettingsTOList.Where(c => c.UserDisplayName.ToLower().Contains("" + searchUserName + "")).ToList(); 

     return results;