2013-04-11 12 views
6
ILookup<string, string> someList; 
      Cricket Sachin 
        Dravid 
        Dhoni 
      Football Beckham 
        Ronaldo 
        Maradona 
bool status = someList.Where(x => x.Key == "Football").Where(y => y.Value == "Ronaldo") 

nên trở về đúngCách tốt nhất để kiểm tra xem giá trị tồn tại cho một chìa khóa trong ILookup <string, string> sử dụng LINQ

bool status = someList.Where(x => x.Key == "Football").Where(y => y.Value == "Venus williams") 

nên trả về false

ILookup doesn' t có giá trị tài sản, thay vì looping hơn, là có một cách thông minh hơn để có được kết quả trong vài dòng. mã ở trên là không đúng, hy vọng một cái gì đó tương tự nếu nó có thể. Tôi mới vào LINQ để học hỏi những cách tốt hơn

Trả lời

2
bool status = someList.Where(x => x.Key == "Football").Any(y => y.Value == "Venus williams") 
+0

tuyệt vời! giống như nó – user2271512

7

Đối tượng trở về từ các ILookup<TKey, TElement>.Item tài sản (đó là những gì được gọi là khi bạn làm someList[...]) là một IEnumerable<TElement>. Vì vậy, bạn có thể so sánh từng mục trực tiếp với giá trị thử nghiệm của mình. Như thế này:

var status = someList["Football"].Any(y => y == "Venus Williams"); 
+0

Nó sẽ thất bại nếu không có phím "" Bóng đá "' trong quá trình tra cứu. Bạn nên gọi 'someList.Contains (" Football ")' trước. – MarcinJuraszek

+3

@MarcinJuraszek Bạn có chắc chắn về điều đó không? Tôi chỉ thử nó bằng cách sử dụng một tra cứu được tạo ra với 'ToLookup' và nó trả về một tập rỗng. Lưu ý rằng tài liệu ['IDictionary'] (http://msdn.microsoft.com/en-us/library/zyxt2e2h.aspx) chỉ định một ngoại lệ, nhưng [' ILookup'] (http://msdn.microsoft.com) /en-us/library/bb549314.aspx) tài liệu thì không. –

+0

Hmm, tôi chắc chứ? Không thực sự, nhưng nó sẽ là một hành vi logic. Cảm ơn bạn rất nhiều vì đã chỉ ra rằng tôi đã sai! – MarcinJuraszek

0

Tôi sẽ sử dụng .Any(x => x.Value == "value").

có thể sai, nhưng tôi nghĩ rằng bạn muốn làm điều đó trong 2 bước, tuy nhiên, kiểm tra xem đầu tiên (key) tìm kiếm thành công trước khi tiếp tục để tìm kiếm giá trị để đảm bảo bạn không làm một .Any() trên null đối tượng

1

Làm thế nào về:

var status = someList.Any(grp => grp.Key.Equals("Football") && grp.Contains("Venus Williams")); 

Giải thích: ILookup là một IEnumerable của IGrouping - một nhóm có một tài sản chính, và đây là danh sách của chuỗi giá trị

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