加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Linq不在VB.Net中

发布时间:2020-12-17 00:27:24 所属栏目:大数据 来源:网络整理
导读:为了教育目的,我尝试将以下 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,Subj
为了教育目的,我尝试将以下 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)的答案不解决我的问题.即使像telerik或carlosag这样的代码转换器在这种情况下也没有帮助.

这就是问题:
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中阅读有关匿名类型的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读