选择DataLoadOptions中的列

时间:2009-06-24 09:00:50

标签: linq linq-to-sql

我正在使用DataLoadOptions来检索修改了客户详细信息的用户,

DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.ModifiedBy);

但是,我只想要用户的ID和FirstName而不是所有列。有没有办法在DataLoadOptions中指定所需的列?

表:

Customer (ID, FirstName, LastName, Email, ModifiedByUserID etc)
User (ID, FirstName, LastName, etc)

2 个答案:

答案 0 :(得分:1)

我认为没有办法指定要使用DataLoadOptions加载的列。

DataLoadOptions.AssociateWith方法允许您限制检索的数据量,但这是以记录为单位。

如果可能,系统必须知道记录只加载了指定数量的列。当未来请求的未加载列时,Linq必须仅从数据库中获取这些列。我认为Linq没有能力做到这一点。

答案 1 :(得分:1)

你无法以编程方式指定它,但你当然可以这样做 - 如果你的目标是最小化返回的列。

<强> DataLoadOptions

options.LoadWith<OrderInfo>(OrderInfo => OrderInfo.SourceSystemOrderDetails);
options.LoadWith<OrderInfo>(OrderInfo => OrderInfo.Packages);

<强>查询

var orders = context.OrderInfo.Select(x => new
                {

                    ID = x.SourceSystemOrderDetails.OrderId,
                    Name = x.SourceSystemOrderDetails.Name,
                    PackageCount = x.Packages.Count()

                }).ToArray();

这将为您提供一个匿名对象。在数据库中,它只返回指定的列。如果需要,您也可以在此处创建业务对象。