Получить значение из поиска C # - PullRequest
7 голосов
/ 13 декабря 2011

Меня интересует, как получить значение из структуры поиска C #.

Пример:

var myLookup = (Lookup<string, int>)data.Rows.Cast<DataRow>().ToLookup(row => row["Name"], row => row["Id"]);

foreach (var myLookupItem in myLookup)
                    {
                        Debug.WriteLine("Name: " + myLookupItem.Key);
                        Debug.WriteLine("Id: " + myLookupItem.ToString());
                    }

Проблема в том, что

myLookupItem.ToString()

не отображает фактическое значение, вместо этого отображается только System.Linq.Lookup2[System.String,System.Int32].

Позже я должен получить значение поиска с помощью лямбды:

 int lookupValue = myLookup.Where(x => x.Key == "Test").Select(x => x).FirstOrDefault());

но это также дает то же, что и выше.

Посоветуйте, пожалуйста, как этого добиться.

Заранее спасибо.

Ответы [ 2 ]

12 голосов
/ 13 декабря 2011

Это потому, что элемент поиска является коллекцией. Вы можете увидеть каждое значение поиска следующим образом:

foreach (var myLookupItem in myLookup)
{
    Debug.WriteLine("Key: " + myLookupItem.Key);
    foreach (var myLookupValue in myLookupItem)
    {
        Debug.WriteLine("Value: " + myLookupValue);
    }
}
4 голосов
/ 13 декабря 2011

«Я не думаю, что это означает то, что вы думаете, что значит». A Lookup ( из MSDN ):

Представляет коллекцию ключей, каждый из которых сопоставлен с одним или несколькими значениями.

т.е. он группирует их (, даже если эти группы единственного числа ).

Похоже, вы хотите использовать что-то вроде словаря вместо поиска. В случае словаря. Вы можете использовать метод расширения ToDictionary () вместо метода расширения ToLookup (). Затем вы будете использовать ключ и значение в словаре.

...