我正在使用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)
答案 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();
这将为您提供一个匿名对象。在数据库中,它只返回指定的列。如果需要,您也可以在此处创建业务对象。