无法弄清楚如何从另一个表中包含

时间:2015-11-24 11:03:57

标签: c# entity-framework linq

因此,首先使用实体​​框架代码,我有两个表。

public class Course
{
    [Key, MaxLength(10)]
    public string CourseId { get; set; }

    [Required]
    public DateTime Created { get; set; }

    [Required]
    public bool Active { get; set; }


    public virtual IEnumerable<CourseText> CourseText { get; set; }
}

public class CourseText
{
    [Key, Column(Order=0)]
    public string CourseId { get; set; }

    [Key, Column(Order=1)]
    public string LanguageCode { get; set; }

    public string CourseName { get; set; }

    public string CourseDescription { get; set; }


    public virtual Course Course { get; set; }

    public virtual Language Language { get; set; }
}

在我的控制器中,我正在尝试查询信息,但我只想要一行用于CourseText,因为课程可以有多种语言。

    public IEnumerable<Course> GetCourses(string languageCode)
    {
        return DbSet
            .Where(a => a.Active)
            .Include(a => a.CourseText)
            .Include(a => a.CourseText.Where(b => b.CourseId == a.CourseId && b.LanguageCode == languageCode))
            ;
    }

但我一直收到以下错误:
Message = Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。

请告诉我我做错了什么。

1 个答案:

答案 0 :(得分:1)

  

Include路径表达式必须引用在类型上定义的导航属性。

由于您将Where表达式放在Include args中,因此会出现此错误。因为Where返回的IEnumerable<T>不是导航属性。

你可以这样做:

public IEnumerable<Course> GetCourses(string languageCode)
    {
        return DbSet
            .Where(a => a.Active)
            .Include(a => a.CourseText)
            .Include(a => a.CourseText)
            .Where(b => b.CourseText.LanguageCode == languageCode);
    }

这假定CourseTextCourse与CourseId

进行了dblink