如何包含子类

时间:2013-04-15 11:45:46

标签: c# asp.net-mvc entity-framework include

有人可以帮我解决这个问题.net mvc问题:

我有这些课程:

public class ImportItem
{
    [Key]
    public int Id { get; set; }
}

public class ImportItemListTemplate
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ImportItem> ImportItemList { get; set; }
}

public class Context : DbContext
{
    public DbSet<ImportItemListTemplate> ImportItemListTemplates { get; set; }
}

在控制器中我需要设置:

Context context = new Context();
int id = ...;
ImportItemListTemplate tmp = context.ImportItemListTemplates.Find(id);

但是这不包括ImportItemListTemplate类中的ImportItemList。我想我需要包含属性ImportItemList,但我不知道如何。

我尝试了一些想法:

ImportItemListTemplate tmp = context.ImportItemListTemplates.Include(i => i.ImportItemList).SingleOrDefault(x => x.Id == id);

但它不起作用。错误:

  

“无法将lambda表达式转换为'string'类型,因为它不是   委托类型“

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:0)

您的代码应如下所示,

ImportItemListTemplate tmp = context.ImportItemListTemplates.Include("ImportItemList").SingleOrDefault(x => x.Id == id);

答案 1 :(得分:0)

试试这个:

ImportItemListTemplate tmp = context.ImportItemListTemplates
                                    .Include(i => i.ImportItemList)
                                    .Where(x => x.Id)
                                    .SingleOrDefault();

答案 2 :(得分:0)

DbSet.Include接受一个字符串,因此对lambda不满意。

我猜您需要的是System.Data.Entity名称空间中的IQueryable<T>.Include扩展方法,尤其是接受表达式的overload。有了它,您可以使用

之类的语法
query.Include(e => e.Level1Collection)

从数据库加载集合属性 如果名称空间未添加到using列表中,请添加名称空间并再次尝试使用该代码。