转换 IQueryable<> 将对象键入 List; 类型?
我有 IQueryable
对象。
我想将其转换为 List<>
,其中包含选定的列,例如 new { ID = s.ID, Name = s.Name }
。
编辑
马克你是绝对正确的!
但我只能访问 FindByAll() 方法(因为我的架构)。
它给了我 IQueryable<>
中的整个对象,
而且我有严格的要求(为选择标签创建 json 对象),只有 list<>
类型和两个字段。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
下面是我临时组合在一起的几个扩展方法,用于将 IQueryable 和 IEnumerable 从一种类型转换为另一种类型(即 DTO)。 它主要用于从较大的类型(即数据库中具有不需要的字段的行的类型)转换为较小的类型。
这种方法的优点是:
LinqHelper.cs:
Here's a couple of extension methods I've jury-rigged together to convert IQueryables and IEnumerables from one type to another (i.e. DTO). It's mainly used to convert from a larger type (i.e. the type of the row in the database that has unneeded fields) to a smaller one.
The positive sides of this approach are:
<DtoType>
() is all you needLinqHelper.cs:
然后只需
Select
:(edit) 实际上 - 在这种情况下可以推断出名称,因此您可以使用:
这可以节省一些电子......
Then just
Select
:(edit) Actually - the names could be inferred in this case, so you could use:
which saves a few electrons...
添加以下内容:
...并在
IQueryable
上调用ToList()
。Add the following:
...and call
ToList()
on theIQueryable<>
.List 类的构造函数可以为您转换 IQueryable:
当然,您也可以在不使用扩展方法的情况下转换它:
The List class's constructor can convert an IQueryable for you:
or you can just convert it without the extension method, of course:
System.Linq 在 IQueryable<> 上有 ToList() 和IEnumerable<>。 不过,它会导致完全遍历数据并将其放入列表中。 当您执行此操作时,您将失去延迟调用。 如果它是数据的消费者,那没什么大不了的。
System.Linq has ToList() on IQueryable<> and IEnumerable<>. It will cause a full pass through the data to put it into a list, though. You loose your deferred invoke when you do this. Not a big deal if it is the consumer of the data.