Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用实体框架和LINQ链接两个类、选择并仍然获得列表输出?_C#_Entity Framework_Linq - Fatal编程技术网

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,给出一个非常完整的答案。还可以显示禁用延迟加载时的代码吗。谢谢