Đối với mục đích giáo dục tôi đã cố gắng để chuyển đổi biểu thức LINQ sau từ cuốn sách "LINQ trong hành động" vào VB.netLINQ không nhóm trong VB.Net
gốc C#
var list =
from book in SampleData.Books
group book by new { book.Publisher.Name, book.Subject }
into grouping
select new {
Publisher = grouping.Key.Publisher,
Subject = grouping.Key.Subject,
Book = grouping
};
nỗ lực của tôi:
Dim list = _books.GroupBy(Function(book) New With {.Publisher = book.Publisher.Name,
book.Subject}).
Select(Function(grouping) New With {.Publisher = grouping.Key.Publisher,
.Subject = grouping.Key.Subject,
.Books = grouping})
For Each item In list
Console.WriteLine("Publisher:" & item.Publisher & ", Subject:" & item.Subject)
For Each Book In item.Books
Console.WriteLine(" " & Book.Title)
Next
Next
Điều này dẫn đến kết quả như sau:
Publisher:FunBooks, Subject:Fun
Funny Stories
Publisher:Joe Publishing, Subject:Work
LINQ rules
Publisher:Joe Publishing, Subject:Work
C# on rails
Publisher:Joe Publishing, Subject:Fun
All your base are belong to us
Publisher:FunBooks, Subject:Fun
Bonjour mon Amour
Tôi mong đợi, sách "Quy tắc LINQ" và "C# trên đường ray" được nhóm cũng như sách "Truyện cười" và "Bonjour mon Amour" vì chúng có cùng Nhà xuất bản và Chủ đề. Khóa ẩn danh của tôi bao gồm một đối tượng mới gồm hai chuỗi đơn giản.
Tôi đã cố gắng tìm kiếm trong SO, nhưng other (or) câu trả lời không giải quyết được sự cố của tôi. Ngay cả một số dịch giả mã như telerik hoặc carlosag không có trợ giúp trong trường hợp này.
Có này hoạt động tuyệt vời; cảm ơn rất nhiều! Wow, một câu trả lời của Jon Skeet. Tôi cảm thấy vinh dự. :-) – Markus
Tôi đã thử nghiệm truy vấn của mình đã thất bại do điều này trong LINQPad và tôi đã sử dụng nguồn LINQ to Entities. Trong mã của tôi, tôi thực sự hiện thực hóa truy vấn (ToList) và chạy truy vấn nhóm từ đó vì tôi phải thực hiện một số tính toán cho mỗi hàng trong thời gian tạm thời. Điều này khiến tôi tin rằng đây là một vấn đề trong LINQ to Objects chứ không phải LINQ to Entities. Tôi giả định điều này sẽ là vì trong LINQ to Entities, biểu thức nhóm được dịch sang TSQL trong khi trong LINQ to Objects, mã băm được sử dụng cho nhóm bình đẳng chính. Điều này có đúng không? – pseudocoder
@pseudocoder: Không, nó không phải về mã băm - đó là về những thuộc tính được sử dụng để xác định sự bình đẳng. Có vẻ như LINQ to Entities xử lý * tất cả các thuộc tính * như các thuộc tính chính ... có vẻ như là một lỗi đối với tôi. Đây không phải là một "vấn đề" trong LINQ to Objects - nó chỉ là vấn đề làm thế nào các loại vô danh trong VB làm việc. –