C# 如何使用实体框架和LINQ链接两个类、选择并仍然获得列表输出?
我有两个目标:短语类别和短语。以下是课程:C# 如何使用实体框架和LINQ链接两个类、选择并仍然获得列表输出?,c#,entity-framework,linq,C#,Entity Framework,Linq,我有两个目标:短语类别和短语。以下是课程: public class PhraseCategory { public System.Guid PhraseCategoryId { get; set; } // PhraseCategoryId public int PhraseCategoryShortId { get; set; } // PhraseCategoryShortId (Primary key) public int PhraseCategoryGroup
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的短语类别:
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);
注意,我希望得到一个有意义的平坦输出。我的意思是一个只包含以下内容的列表:
短语ID、英语和类别ID这将满足您的需要:
phrases = phrases.Where( x => x.PhraseCategory.PhraseCategoryGroupId == 25 )
.Select( x => new
{
PhraseId = x.PhraseId,
English = x.English,
CategoryId = x.CategoryId
});
请注意,您还可以创建其他类型的实例,而不是我在上面的查询中创建的匿名类型
此外,phraseCography将在上述查询中延迟加载,因为您已在属性上启用延迟加载:它是虚拟的。如果全局禁用了延迟加载,则需要在查询中使用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
});
您是否尝试过类似var query=db.Phrases.AsQueryable.Includexx=>xx的方法。短语类别。其中yy=>yy。PhraseCategoryGroupId==25,给出一个非常完整的答案。还可以显示禁用延迟加载时的代码吗。谢谢