如何包含子类

本文关键字:子类 何包含 | 更新日期: 2023-09-27 18:09:29

谁能帮帮我这个。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);

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

我试着这样想:

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

但是它不起作用。错误:

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

非常感谢你的帮助

如何包含子类

您的代码应该如下所示,

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

试试这个:

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

DbSet.Include接受字符串,所以它不会满意lambda。

我猜你需要的是IQueryable<T>.Include扩展方法,它在System.Data.Entity命名空间中,特别是接受表达式的重载。有了它,你可以使用像

这样的语法
query.Include(e => e.Level1Collection)

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