2009-09-27 5 views
8

Tôi có hai biến kiểu ILookup. Tôi muốn sử dụng Union hoặc Concat để kết hợp các giá trị của chúng và gán kết quả cho biến thứ ba cùng loại. Cả Union và Concat đều trở lại IGrouping. Nó phải chết đơn giản để chuyển đổi IGrouping thành ILookup nhưng tôi không thể làm được !!! :-(IGrouping cho thấy chỉ là chìa khóa vì vậy tôi đang đấu tranh với các tham số thứ hai của Lookup .... Bất kỳ trợ giúp sẽ được nhiều, nhiều đánh giá caoLINQ Chuyển đổi từ IGrouping sang Tra cứu

Trả lời

9

Tôi nghĩ rằng bạn sẽ cần phải san bằng các chuỗi đầu tiên, để sử dụng ToLookup:

var lookup = first.Concat(second) 
        .SelectMany(group => group, 
           (group, item) => new { Key = group.Key, 
                Item = item }) 
        .ToLookup(x => x.Key, x => x.Item); 

đó sử dụng các hình thức SelectMany mà phải mất hai đại biểu: một để chuyển đổi một mục trong trình tự ban đầu cho một bộ sưu tập, và một người khác để có một mục trong bộ sưu tập ban đầu (tức là nhóm) và một mục trong bộ sưu tập được trả về (tức là các mục phù hợp với khóa của nhóm) để đến mục kết quả. Đây là cách đơn giản nhất (tôi nghĩ!) của việc làm phẳng một nhóm thành một chuỗi các mục có khóa của chúng .

Ở trên không được kiểm tra, vì vậy có thể hoàn toàn sai. Nó cũng tương đối kém hiệu quả ... đó là một sự xấu hổ mà không có cách nào để xây dựng một thể hiện của Lookup trực tiếp. Bạn có thể tự mình thực hiện ILookup.