Linq不在VB.Net中

前端之家收集整理的这篇文章主要介绍了Linq不在VB.Net中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为了教育目的,我尝试将以下 Linq表达式从“ Linq in action”转换成VB.net

原始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
  };

我的尝试:

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

这将导致以下输出

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

我预计,“LINQ规则”和“C#在轨道”上的书籍都被分组,以及书籍“滑稽故事”和“Bonjour mon Amour”,因为它们具有相同的发行者和主题.
我的匿名密钥包含两个简单字符串的新对象.

我已经尝试搜索SO,但other(or)的答案不解决我的问题.即使像telerikcarlosag这样的代码转换器在这种情况下也没有帮助.

这就是问题:
GroupBy(Function(book) New With {.Publisher = book.Publisher.Name,book.Subject})

这不等同于C#版本,因为不幸的是VB默认使用匿名类型的可变属性,并且可变属性不被视为散列代码或等式操作的一部分.您需要使两个属性“Key”属性

GroupBy(Function(book) New With {Key .Publisher = book.Publisher.Name,Key book.Subject})

那么它应该工作正常您可以在VB on MSDN中阅读有关匿名类型的更多信息.

原文链接:https://www.f2er.com/vb/255167.html

猜你在找的VB相关文章