Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从子对象填充“加载选项”中的属性_C#_Linq To Sql - Fatal编程技术网

C# 从子对象填充“加载选项”中的属性

C# 从子对象填充“加载选项”中的属性,c#,linq-to-sql,C#,Linq To Sql,我正在使用LINQtoSQL来填充我的对象。以前,我使用延迟加载,然后遍历列表访问子对象以强制加载。对于我拥有的大型数据集来说,这不是一个很好的解决方案,因此我现在在数据上下文中设置LoadOptions,以便一开始就获取所有数据 我遇到的一个问题是,在我通过列表在每次迭代中手动加载单个属性之前,我不确定现在如何完成。它只是一个简单的字符串值 info.CreatedByName = info.CreatedBy.Name; 在我的数据上下文中,我指定的加载选项如下: DataLoadOp

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

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

 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。