2011-12-13 48 views
5

Tôi quan tâm đến cách lấy giá trị từ cấu trúc tra cứu C#.Nhận giá trị từ tra cứu C#

Ví dụ:

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()); 
        } 

Vấn đề là

myLookupItem.ToString() 

không hiển thị giá trị thực tế, thay vì chỉ System.Linq.Lookup2[System.String,System.Int32] được hiển thị.

Sau đó, tôi sẽ nhận được các giá trị tra cứu sử dụng lambda:

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

nhưng điều này cũng cung cấp cho các tương tự như trên.

Vui lòng thông báo cách đạt được điều này.

Xin cảm ơn trước.

Trả lời

10

Đó là vì mục tra cứu là một bộ sưu tập. Bạn có thể xem mọi giá trị của tra cứu như sau:

foreach (var myLookupItem in myLookup) 
{ 
    Debug.WriteLine("Key: " + myLookupItem.Key); 
    foreach (var myLookupValue in myLookupItem) 
    { 
     Debug.WriteLine("Value: " + myLookupValue); 
    } 
} 
4

"Tôi không nghĩ nó có nghĩa là ý của bạn."

Một Lookup (from MSDN):

Đại diện cho một tập hợp các phím mỗi ánh xạ tới một hoặc nhiều giá trị.

tức là nhóm sẽ nhóm chúng (ngay cả khi các nhóm này là số ít).

Dường như bạn muốn sử dụng thứ gì đó như từ điển thay vì tra cứu. Trong trường hợp của một từ điển. Bạn có thể sử dụng phương thức mở rộng ToDictionary() thay cho phương thức mở rộng ToLookup(). Sau đó, bạn sẽ sử dụng khóa và giá trị trên từ điển.

+1

Không thể tưởng tượng ...! –

Các vấn đề liên quan