我有两张桌子。 Word
表包含单词列表,然后WordForm
表包含每个单词的词性列表。
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 :(得分: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
}
答案 1 :(得分: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
});