2017-01-12 10 views
0

私はPhraseCategoryとPhraseの2つのオブジェクトを持っています。ここではクラスです:2つのクラスをリンクするには、Entity FrameworkとLINQを使用してリスト出力を選択します。

public class PhraseCategory 
{ 
    public System.Guid PhraseCategoryId { get; set; } // PhraseCategoryId 
    public int PhraseCategoryShortId { get; set; } // PhraseCategoryShortId (Primary key) 
    public int PhraseCategoryGroupId { get; set; } // PhraseCategoryGroupId 
    public string Name { get; set; } // Name (length: 20) 
    // Reverse navigation 
    public virtual System.Collections.Generic.ICollection<Phrase> Phrases { get; set; } // Phrase.FK_PhrasePhraseCategory 
} 

public class Phrase : AuditableTable 
{ 
    public System.Guid PhraseId { get; set; } // PhraseId (Primary key) 
    public string English { get; set; } // English 
    public int? CategoryId { get; set; } // CategoryId 

    // Foreign keys 
    public virtual PhraseCategory PhraseCategory { get; set; } // FK_PhrasePhraseCategory 
} 

誰かが、私は25

のPhraseCategoryGroupId例えば持つすべてのフレーズを選択することができていますように、私はこれらに参加することができる方法を教えてもらえますここでは、私が今持っているものだが、私はちょうどフラット出力(理にかなっている希望を)取得したいと思い

 List<Phrase> phrases; 

     var query = db.Phrases.AsQueryable(); 

     if (options.CreatedBy != 0) query = query 
      .Where(w => w.CreatedBy == options.CreatedBy); 

     phrases = await query 
      .AsNoTracking() 
      .ToListAsync(); 

     return Ok(phrases); 

注:アカウントにもPhraseCategoryGroupIdを持ってPhraseCategoryとフレーズを選択することができるように、私の必要性を取ることはありません。あなたはまた、代わりに別の型のインスタンスを作成することができますので、予めご了承ください

phrases = phrases.Where(x => x.PhraseCategory.PhraseCategoryGroupId == 25) 
       .Select(x => new 
         { 
          PhraseId = x.PhraseId, 
          English = x.English, 
          CategoryId = x.CategoryId 
         }); 

:これはあなたが必要なものを取得する必要があります

PhraseId、英語と区分

+0

あなたはVARクエリのようなものを試してみました= db.Phrases.AsQueryable()(。XX => XX PhraseCategory).Where(YY => YYを含めるPhraseCategoryGroupId == 25。 ) –

答えて

1

:私は何を意味することは、単に含むリストです上記のクエリで作成している匿名型の名前です。

また、PhraseCategoryはプロパティで遅延ロードが有効になっているため、上記のクエリで遅延ロードされます。これは仮想です。グローバルに遅延ロードを無効にした場合は、クエリでIncludeメソッドを使用する必要があります。次に、あなたのクエリはなります:。

phrases = phrases.Include(x => x.PhraseCategory) 
       .Where(x => x.PhraseCategory.PhraseCategoryGroupId == 25) 
       .Select(x => new 
           { 
            PhraseId = x.PhraseId, 
            English = x.English, 
            CategoryId = x.CategoryId 
           }); 
+1

非常に完全な答えをする。レイジーローディングが無効になっている場合のコードも表示できますか?ありがとう – Alan2

+1

@Alanありがとう。編集しました。それは良いヒントでした。 – CodingYoshi

関連する問題