2017-07-08 6 views
3

特に問題があります。私はあまりにもSQLに慣れていないので、これは愚かな質問かもしれません。私は、次のクラスにLinq .NETの最初の行に接続されているテーブル行と行のリストを取得する方法

class StructuredResult 
{ 
    public Pay Pay{ get; set; } 
    public Processing Processing{ get; set; } 
    public Member Member { get; set; } 

    public StructuredResult() 
    { 
    } 
} 

を持っており、これは

var allPaying = (from pay in Entities.Pays 
       join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation 
       join mbr in Entities.Members on pay.IDMember equals mbr.IDMember 

       where pay.IDMember == IDMember 
       orderby prc.DateFrom descending 
       select new StructuredResult() 
       { 
        Pay = pay, 
        Processing = prc, 
        Member = mbr 
       }).ToList(); 

コードは、私がここに投稿するためのものを変更し正常に動作していると私はこれを取得していたコードで、おそらくいくつかの名前の変更はOKではありません。私が得る必要があるのは次のとおりです。

class StructuredResult 
{ 
    public Pay Pay{ get; set; } 
    public Processing Processing{ get; set; } 
    public Member Member { get; set; } 
    public List<PayDetail> PayDetails { get; set; } 

    public StructuredResult() 
    { 
    } 
} 

誰でも知っていますか?詳細はまた、あなたがGroup Joinを使用する必要がPayDetailのコレクションでStructuredResultを移入するためには、事前

答えて

1

でPay.ID = PayDetail.ID おかげで接続されている支払います。参照:

  1. MSDN on GroupJoin
  2. そして最後Linq to Entities join vs groupjoin

ので:

var allPaying = from pay in Entities.Pays 
       join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation 
       join mbr in Entities.Members on pay.IDMember equals mbr.IDMember 
       join d in Entities.PayDetails on pay.IDMember equals d.ID into details 

       where pay.IDMember == IDMember 
       orderby prc.DateFrom descending 

       select new StructuredResult() 
       { 
        Pay = pay, 
        Processing = prc, 
        Member = mbr, 
        PayDetails = details 
       }; 

私はまた、あなたが使用しているので、EFは、ナビゲーションプロパティを調べることをお勧めします。少し違った自分のクラスを定義することで、あなたははるかに少ないと(例えば加入の書き込みは不要)をはるかに能力を取得していないだろう

  1. MSDN - Entity Framework Relationships and Navigation Properties
  2. MSDN - How to: Navigate Relationships Using Navigation Properties

そして、ちょうど小さなヒント - あなたはidに論理がないデフォルトコンストラクタを定義しています。これが本当のコードでも当てはまる場合、それは必要ありません。自動的に定義されます。

+0

これが動作しているように見えます。 Entities.Pays.Include( "PayDetails")を試してみましたが、すぐに読み込まれなかったという点があります。私はこのために遅延ロードをどのように無効にできますか?私は、多くの計算のために、必要に応じて後で怠惰な負荷がないように、すべてのものをavaillableにしたい、データベースへの複数のクエリに時間がかかる。あなたが書いたものは、130msの平均値から5msまでずっとうまく動作します:) – Shakal187

+0

@ Shakal187 - 'details 'の後ろに' .ToList() 'を追加して、クエリ全体を追加することもできます。これ以上のものは別の質問でなければなりません:)(このフォローアップには他にも多くの質問があります) –

1

これはあなたを助けることがあります。

var allPaying = (from pay in Entities.Pays 
       join prc in Entities.Processingss on pay.IDCalculation equals cal.IDCalculation 
       join mbr in Entities.Members on pay.IDMember equals mbr.IDMember 

       where pay.IDMember == IDMember 
       orderby prc.DateFrom descending 
       select new StructuredResult() 
       { 
        Pay = pay, 
        Processing = prc, 
        Member = mbr, 
        PayDetails = (from pd in Entities.PayDetails 
            where pd.ID == pay.IDMember 
            select pd).ToList()) 
       }).ToList(); 
関連する問題