• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:LINQでn:nテーブルを階層オブジェクトに)

LINQでn:nテーブルを階層オブジェクトに抽出する方法

このQ&Aのポイント
  • LINQを使用して、会員と種別のn:n関係を持つテーブルから階層オブジェクトを抽出する方法を教えてください。会員を表すMembersテーブル、種別を表すTypesテーブル、会員と種別を結び付けるMemberTypeBindsテーブルがあります。
  • LINQを使用してMemberTypesクラスオブジェクトに抽出したい場合、MemberTypesクラスにはMemberオブジェクトとTypeのリストが含まれます。
  • 具体的なLINQのコード例がわからないため、GroupByメソッドを使用してMemberTypeBindsをグループ化するところまではできましたが、その後の階層オブジェクトを生成する方法がわかりません。お手数ですが、詳しい方にアドバイスをいただけますと幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

ここでLINQについて質問しても回答は出ないのでは。 C#カテのほうが向いてると思うよw LINQは本当に便利。取得だけならSQLなど一行も書く必要ないし、オブジェクトに詰める手間もいらない。 キモは、Group化してまとめたボディ部を、Selectで別の型に変えるところでしょう。 public List<MemberTypes> GetMemberTypes(){  using (var dc = new DataContext()){   return dc.MemTypeBinds    .GroupBy(mt=>mt.Member)    .Select(g=>new MemberTypes{     member = g.Key,     types = g.Select(mtg=>mtg.Type).ToList()    }).ToList();  } } 逆の種別->メンバー(複数)変換も書いてみたww public List<TypeMembers> GetTypeMembers() {  using (var dc = new DcHealth()) {   return dc.MemTypeBinds    .GroupBy(mt => mt.Type)    .Select(g => new TypeMembers {     type = g.Key,     members = g.Select(mtg => mtg.Member).ToList()    }).ToList();  } } 面白いwww

nayutax
質問者

お礼

shockatzさま、正月早々ありがとうございます。 感謝感激です。 members= g.Select(mtg => mtg.Member) のところが本当に感心しました。GroupByすると、なんか変なクラス(IGrouping)に変換されてしまっていて、手も足も出なかったのですが、これなら何にでも応用できますね! SQLのパラメタクエリで、長いSQLCommandを書くのが苦痛で苦痛で仕方なかったので、本当に嬉しいです。 LINQやEFについて、また質問させてください。よろしくお願いします。 (@IT会議室での御礼も含めまして)本年もよろしくお願い申し上げます。

関連するQ&A