電子書籍の厳選無料作品が豊富!

お世話になっております。
表題のテーマについて、理解いただける方にアドバイスお願いします。

会員を表すMembersというテーブル、
種別を表すTypesというテーブル、
会員と種別を結び付けるMemberTypeBindsというテーブルがあって、会員・種別がn対nで定義されています。
Membersの件数は200件ほど、Typeは20件程度。だいたいMembersは1~5くらいのTypeに紐づいています。

Table Members
int ID(主キー, autoIncrement)
varchar(20) MemberName

Table Types
int ID(主キー, autoIncrement)
varchar(20) TypeName

Table MemberTypeBinds
int memberID(外部キー, MembersのID)
int typeID(外部キー, TypesのID)

これを、LINQで下記のクラスオブジェクトに抽出したいと思っています。
今は全件表示でもいいですが、そのうちページングで表示する必要がでてくると思います。

public class MemberTypes
{
 public Member member{ get; set; }
 public List<Type> types { get; set; }
}

どうやるかがわかりません。LINQはこんな感じだと思うのですが、

public List<MemberTypes> GetMemberTypes(){
 using (var dc = new DataContext()){
  var result = dc.MemTypeBinds
   .GroupBy(mt=>mt.Member)
   // このあと、どうやったらいいかがわかりません。
   // DBから階層化オブジェクトを生成するのは
   // けっこう頻出のテーマだと思うので、しっかりマスターしたいです。
  }).ToList();
  return result;
 }
}

LINQに詳しい方、お助けください。

A 回答 (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
    • good
    • 0
この回答へのお礼

shockatzさま、正月早々ありがとうございます。
感謝感激です。

members= g.Select(mtg => mtg.Member)
のところが本当に感心しました。GroupByすると、なんか変なクラス(IGrouping)に変換されてしまっていて、手も足も出なかったのですが、これなら何にでも応用できますね!

SQLのパラメタクエリで、長いSQLCommandを書くのが苦痛で苦痛で仕方なかったので、本当に嬉しいです。
LINQやEFについて、また質問させてください。よろしくお願いします。

(@IT会議室での御礼も含めまして)本年もよろしくお願い申し上げます。

お礼日時:2013/01/08 23:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!