我需要获取查询结果:
var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;
并准备为 ICollection 以便我可以拥有类似的东西
ICollection<SoilSamplingSubJob> subjobs
目前我创建了一个不适合我需要的列表:
query.ToList();
我该怎么办 - 它是 query.ToIcollection() 吗?
我需要获取查询结果:
var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;
并准备为 ICollection 以便我可以拥有类似的东西
ICollection<SoilSamplingSubJob> subjobs
目前我创建了一个不适合我需要的列表:
query.ToList();
我该怎么办 - 它是 query.ToIcollection() 吗?
列表是一个 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>;
由于查询实现了 IEnumerable,因此您可以将其传递给您选择的集合的构造函数。ICollection 是一个接口,由多个List<T>
具有不同性能特征的类(包括 ToList 返回的 )实现。
使用稍微不同的语法,您也可以执行类似的操作,以减少进入 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>