教育目的のために、私はLinqの実際の動作をVB.netのVB.netに変換しようとしました。LinqはVB.Netでグループ化しません
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#on rails」は、「Funny Stories」と「Bonjour mon Amour」の書籍は同じパブリッシャーおよび科目。 私の匿名キーは、2つの単純な文字列の新しいオブジェクトで構成されています。
私はすでにSOで検索しようとしましたが、other(or)の答えは私の問題を解決しません。 telerikやcarlosagのような一部のコード翻訳者でさえ、この場合は助けになりません。
をはい、これは素晴らしい作品。どうもありがとう!うわー、Jon Skeet自身の答え。光栄です。 :-) – Markus
LINQPadでこれが原因で失敗したクエリをテストし、LINQ to Entitiesソースを使用しました。私のコードでは、私は実際にはクエリ(ToList)を実体化しており、その中からいくつかの行ごとの計算を行う必要があるため、グループクエリを実行しています。これは、これがLINQ to Objectsでは問題だと思っていますが、LINQ to Entitiesでは問題ではないと思います。 LINQ to Entitiesではグループ化式がTSQLに変換され、LINQ to Objectsではグループキーの等価性にハッシュコードが使用されるため、これが想定されています。これは正しいのですか? – pseudocoder
@ pseudocoder:いいえ、ハッシュコードではありません。それは、どのプロパティが等価性を判断するために使用されるかです。 LINQ to Entitiesは*すべてのプロパティをキープロパティとして扱います。これはバグのようなものです。これはLINQ to Objectsの「問題」ではありません。VBでの匿名型の仕組みの問題です。 –