8

我需要获取查询结果:

 var query = from m in db.SoilSamplingSubJobs where m.order_id == id select m;

并准备为 ICollection 以便我可以拥有类似的东西

 ICollection<SoilSamplingSubJob> subjobs

目前我创建了一个不适合我需要的列表:

query.ToList();

我该怎么办 - 它是 query.ToIcollection() 吗?

4

3 回答 3

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>;
于 2010-05-30T19:04:41.817 回答
1

由于查询实现了 IEnumerable,因此您可以将其传递给您选择的集合的构造函数。ICollection 是一个接口,由多个List<T>具有不同性能特征的类(包括 ToList 返回的 )实现。

于 2010-05-30T15:38:23.467 回答
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>
于 2017-08-08T02:59:09.350 回答