从子对象填充加载选项中的属性

时间:2010-12-30 00:31:54

标签: c# linq-to-sql

我正在使用Linq来sql来填充我的对象。以前,我使用延迟加载,然后遍历我的列表访问子对象以强制加载。对于我拥有的大型数据集,这不是一个非常好的解决方案,因此我现在在我的数据上下文中设置LoadOptions以便最初获取它。

我遇到的一个问题是,在我通过列表手动加载每次迭代的单个属性之前,我现在还不确定如何完成此操作。它只是一个简单的字符串值。

 info.CreatedByName = info.CreatedBy.Name;

在我的数据环境中,我正在指定我的加载选项:

 DataLoadOptions loadOptions = new DataLoadOptions();
 loadOptions.LoadWith<Info>(info => info.Owner);
 loadOptions.LoadWith<Info>(info => info.CreatedBy);

有没有办法在我的加载选项中指定此属性的赋值?类似的东西:

 loadOptions.LoadWith<Info>(info => info.CreatedByName)

2 个答案:

答案 0 :(得分:1)

您所做的一切都完全有效,但您必须在设置上下文的LoadWith选项后在查询中明确选择CreatedBy,例如

var result = from info in context.Infos
             join user in context.Users on info.CreatedById equals user.Id
             select info;

我遇到了同样的问题,请检查this solution

答案 1 :(得分:1)

我认为您不能以这种方式使用LoadOptions。如果您不需要执行对象跟踪,则可以使用投影容器类,并在构造时显式设置该属性。

from info in context.Infos
select new InfoContainer
{
    CreatedByName = CreatedBy.Name
}

您可以为Info添加部分类,并添加引用CreatedBy.Name

的属性
public string CreatedByName
{
    get
    {
        return CreatedBy.Name;
    }
}

这会假设CreatedBy已加载,或者如果未填充则延迟加载它。