2016-04-29 20 views
-1

我有兩個表。 Word表包含單詞列表,然後WordForm表包含每個單詞的詞性列表。我怎樣才能得到從LINQ的父/子表的數據「平」輸出

public class Word 
{ 
    public Word() 
    { 
     CategoryId = 1; 
     WordForms = new System.Collections.Generic.List<WordForm>(); 
    } 
    public string WordId { get; set; } // WordId (Primary key) (length: 20) 
    public int CategoryId { get; set; } // CategoryId 
    public virtual System.Collections.Generic.ICollection<WordForm> WordForms { get; set; } // WordForm.FK_WordFormWord 
    public virtual WordCategory WordCategory { get; set; } // FK_WordWordCategory 

} 

public class WordForm 
{ 
    public string WordFormId { get; set; } // WordFormId (Primary key) (length: 20) 
    public string WordId { get; set; } // WordId (length: 20) 
    public int PosId { get; set; } // PosId 
    public string Definition { get; set; } // Definition 
    public virtual Pos Pos { get; set; } // FK_WordFormPos 
    public virtual Word Word { get; set; } // FK_WordFormWord 
} 

我想加入這兩個表是這樣的:

var word = db.Words 
      .Include(wf => wf.WordForms) 
      .AsNoTracking() 
      .FirstOrDefaultAsync(); 

這給了我對象的形式輸出。

我怎樣才能看到什麼是表中,這樣我又回到了我這個樣子,其中每行有所有這些列的數據:

WordId CategoryId WordFormId PosId Definition 
WordId CategoryId WordFormId PosId Definition 
WordId CategoryId WordFormId PosId Definition 
WordId CategoryId WordFormId PosId Definition 
+0

你最終需要在哪裏放置數據? – Efrain

回答

1

您可以使用SelectMany扁平化輸出:

var words = db.Words 
       .Include(wf => wf.WordForms) 
       .SelectMany(w => w.WordForms.Select(wf => new 
       { 
        WordId = w.WordId, 
        CategoryId = w.CategoryId, 
        WordFormId = wf.WordFormId, 
        PosId = wf.PosId, 
        Definition = wf.Definition 
       })); 

如果你只想得到第一個結果Word

var word = await db.Words 
        .Include(wf => wf.WordForms) 
        .AsNoTracking() 
        .FirstOrDefaultAsync(); 

var output = word.WordForms.Select(wf => new 
{ 
    WordId = wf.Word.WordId, 
    CategoryId = wf.Word.CategoryId, 
    WordFormId = wf.WordFormId, 
    PosId = wf.PosId, 
    Definition = wf.Definition 
}); 
+0

謝謝你真的很好的答案。如果我想挑選一個類別,我會在db.Words之後用.Where(w => w.CategoryId = 123) – Alan2

+0

是的,就是這樣。 –

+0

對不起,在'Include'之後 –

2

您可以只使用WordForm下手

from wf in db.WordForms 
    //your where conditions even on wf.Word 
    select new 
    { 
     WordId = wf.Word.WordId, 
     CateogoryId = wf.Word.CategoryId, 
     WordFormId = wf.WordFormId, 
     PosId = wf.PosId, 
     Definition = wf.Definition 
    } 
相關問題