我有两个对象:PhraseCategory和Phrase。这是班级:
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
}
有人可以告诉我如何加入这些,以便我能够选择所有短语,例如PhraseCategoryGroupId为25.
这是我现在所拥有的,但它没有考虑到我还需要能够选择具有PhraseCategoryGroupId的PhraseCategory的短语:
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);
请注意,我想得到一个平坦的输出(希望有意义)。我的意思是一个包含的列表:
PhraseId,English和CategoryId
答案 0 :(得分:1)
这可以满足您的需求:
phrases = phrases.Where( x => x.PhraseCategory.PhraseCategoryGroupId == 25 )
.Select( x => new
{
PhraseId = x.PhraseId,
English = x.English,
CategoryId = x.CategoryId
});
请注意,您还可以创建其他类型的实例,而不是我在上述查询中创建的匿名类型。
此外,由于您在属性上启用了延迟加载,因此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
});