C# 急于加载LINQ存储过程调用的子级

C# 急于加载LINQ存储过程调用的子级,c#,linq-to-sql,linq-to-entities,asp.net-3.5,C#,Linq To Sql,Linq To Entities,Asp.net 3.5,我有一个特殊的存储过程,它从我的数据库返回一个分销商列表。然后,我迭代分销商的循环,并将结果输出到一个网页。但是,我需要为每个分销商加载州和国家/地区。我宁愿在循环之前做一次,这样页面会更快。这是我的代码: List<Distributor> distQuery = connection.spDistFindLocal(Lat, Long).ToList<Distributor>(); List distQuery=connection.spDistFindLocal

我有一个特殊的存储过程,它从我的数据库返回一个分销商列表。然后,我迭代分销商的循环,并将结果输出到一个网页。但是,我需要为每个分销商加载州和国家/地区。我宁愿在循环之前做一次,这样页面会更快。这是我的代码:

List<Distributor> distQuery =  connection.spDistFindLocal(Lat, Long).ToList<Distributor>();
List distQuery=connection.spDistFindLocal(Lat,Long.ToList();
我知道我可以做
distributor.State.Load()在我列表中的每个元素上,但我认为这是一个糟糕的选择。我还有什么其他选择?

使用投影:

List<DistributorViewModel> distQuery =  
    (from d in connection.spDistFindLocal(Lat, Long)
     select new DistributorViewModel
     {
         Name = d.Name,
         State = d.State.Name,
         Country = d.Country.Name
     })ToList();
List distQuery=
(从d连接到spDistFindLocal(横向,纵向)
选择新的DistributorViewModel
{
Name=d.Name,
State=d.State.Name,
Country=d.Country.Name
})托利斯特();

这不仅可以在一个查询中加载所有数据,还可以忽略加载您不关心的属性。

@Craig-Awesome我甚至没有这样考虑这个问题!有一个问题,我需要声明DistributorViewModel中是什么,对吗?如果是的话,我会在哪里做?有没有一篇文章介绍过它?这对我来说是一个新领域。谢谢您可以在范围中的任何位置声明新类型,或者在某些情况下可以使用匿名类型@克雷格-所以我花了一段时间才回到这个话题,但它完全有效!我喜欢,谢谢你的帮助。在你的博客帖子上有一件事你有[Key,ScaffoldColumn(false)]。那是怎么用的?我在页面中创建了演示类,因为我只使用了一次。当我尝试添加代码时,VS2010根本没有识别它。我已经升级到.Net 4,所以不确定这是否有什么不同。
ScaffoldColumn
(1)需要
使用System.ComponentModel.DataAnnotations
,(2)告诉MVC 2的模板化视图不要为该属性生成编辑器。@Craig-谢谢!我还没有在我的网站上使用MVC,所以这不是一个问题。