1

有人可以帮我解决这个 .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 表达式转换为类型‘字符串’,因为它不是委托类型”

非常感谢您的帮助。

4

3 回答 3

0

您的代码应如下所示,

ImportItemListTemplate tmp = context.ImportItemListTemplates.Include("ImportItemList").SingleOrDefault(x => x.Id == id);
于 2013-04-15T11:51:50.510 回答
0

尝试这个:

ImportItemListTemplate tmp = context.ImportItemListTemplates
                                    .Include(i => i.ImportItemList)
                                    .Where(x => x.Id)
                                    .SingleOrDefault();
于 2013-04-15T11:52:31.487 回答
0

DbSet.Include接受一个字符串,所以它不会对 lambda 感到满意。

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

query.Include(e => e.Level1Collection)

从数据库加载集合属性。
如果名称空间未添加到using列表中,请添加名称空间,然后重试代码。

于 2013-04-15T12:00:28.220 回答