我需要获取查询结果:
var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;
并准备ICollection以便我可以拥有类似
的内容 ICollection<SoilSamplingSubJob> subjobs
目前我创建的列表不符合我的需求:
query.ToList();
我该怎么办 - 是query.ToIcollection()?
答案 0 :(得分:14)
列表是ICollection。您可以将query.ToList()代码更改为以下内容。
query.ToList() as ICollection<SoilSamplingSubJob>;
您的问题听起来像这个查询作为函数结果返回。如果是这种情况,请记住默认情况下Linq to SQL对象已连接,因此您需要管理数据库上下文打开和关闭的位置。或者,您可以创建DTO(数据传输对象),以保存要在程序的其余部分中使用的数据。这些对象可以任何方式适合您的对象层次结构。
您也可以在查询中创建这些DTO。
var query = from m in db.SoilSamplingSubJobs where m.order_id == id
select new SubJobDTO {
OrderNumber = m.order_id
};
return query.ToList() as ICollection<SubJobDTO>;
答案 1 :(得分:1)
因为,query实现了IEnumerable,你可以将它传递给你选择的集合的构造函数。 ICollection是一个接口,由多个类(包括List<T>
实现,ToList返回)具有不同的性能特征。
答案 2 :(得分:0)
语法稍有不同,你也可以这样做,这可以减少ICollection的内容。当你有一个庞大的表但只想在cshtml页面中加载一些道具时,这种方法非常适合Angular和MVC:
ICollection<SoilSamplingSubJob> samples = dbContext.GetQuery().Where(m => m.order_id == id)
.AsEnumerable().Select(s => new
{
Id = s.order_id,
CustomProperty = s.some_thing
}).ToList() as ICollection<SoilSamplingSubJob>