C# 从子对象填充“加载选项”中的属性
我正在使用LINQtoSQL来填充我的对象。以前,我使用延迟加载,然后遍历列表访问子对象以强制加载。对于我拥有的大型数据集来说,这不是一个很好的解决方案,因此我现在在数据上下文中设置LoadOptions,以便一开始就获取所有数据 我遇到的一个问题是,在我通过列表在每次迭代中手动加载单个属性之前,我不确定现在如何完成。它只是一个简单的字符串值C# 从子对象填充“加载选项”中的属性,c#,linq-to-sql,C#,Linq To Sql,我正在使用LINQtoSQL来填充我的对象。以前,我使用延迟加载,然后遍历列表访问子对象以强制加载。对于我拥有的大型数据集来说,这不是一个很好的解决方案,因此我现在在数据上下文中设置LoadOptions,以便一开始就获取所有数据 我遇到的一个问题是,在我通过列表在每次迭代中手动加载单个属性之前,我不确定现在如何完成。它只是一个简单的字符串值 info.CreatedByName = info.CreatedBy.Name; 在我的数据上下文中,我指定的加载选项如下: DataLoadOp
info.CreatedByName = info.CreatedBy.Name;
在我的数据上下文中,我指定的加载选项如下:
DataLoadOptions loadOptions = new DataLoadOptions();
loadOptions.LoadWith<Info>(info => info.Owner);
loadOptions.LoadWith<Info>(info => info.CreatedBy);
DataLoadOptions-loadOptions=newdataloadoptions();
loadOptions.LoadWith(info=>info.Owner);
loadOptions.LoadWith(info=>info.CreatedBy);
有没有办法在“我的加载选项”中指定此属性的分配?比如:
loadOptions.LoadWith<Info>(info => info.CreatedByName)
loadOptions.LoadWith(info=>info.CreatedByName)
您所做的一切都是完全有效的,但在设置上下文的LoadWith选项后,必须在查询中显式选择CreatedBy,例如
var result = from info in context.Infos
join user in context.Users on info.CreatedById equals user.Id
select info;
我也遇到了同样的问题,请检查我认为您不能以这种方式使用LoadOptions。如果不需要执行对象跟踪,可以使用投影容器类,并在构造时明确设置属性
from info in context.Infos
select new InfoContainer
{
CreatedByName = CreatedBy.Name
}
您可以为Info添加一个分部类,并添加一个引用CreatedBy.Name的属性
public string CreatedByName
{
get
{
return CreatedBy.Name;
}
}
这将假定CreatedBy已加载,或者如果未填充,则延迟加载它。CreatedByName在何处定义?CreatedByName是在信息部分中定义的,我在此处使用自动属性,因此我在OnLoaded()事件中设置CreatedByName=CreatedBy.Name。