c# – 将LINQ匿名类型转换为IList <>时出错
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 将LINQ匿名类型转换为IList <>时出错,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1527字,纯文字阅读大概需要3分钟。
内容图文
![c# – 将LINQ匿名类型转换为IList <>时出错](/upload/InfoBanner/zyjiaocheng/765/195f32f66b774e0a849b5459fb0d7a8c.jpg)
我有以下LINQ加入:
var query = _ABC.Table
.Join(_DEF.Table, cef => ...etc... })
.Join(_GHI.Table, extf => ...etc...})
.Select(jcefn=> new { XYZ = jcefn....etc...});
linq很好并且返回我期望的(在LINQ pad中验证).
我试图将查询传递给具有此签名的扩展方法:
public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
{ ... }
所以我认为这是可以接受的:
var FPaged = new PagedList<MyObject>(query.ToList(), pageIndex, pageSize);
但这显然不会让编译器感到高兴.它说:
参数1:无法从’System.Collections.Generic.List’转换为’System.Linq.IQueryable等.
显然我需要更改我的linq匿名类型,但不确定究竟要将其更改为什么?
请注意,为了简洁起见,我没有包含大量代码,认为它不需要理解,但我很乐意在需要时编辑它.
谢谢
解决方法:
PagedList需要IQueryable< MyQuery>.您的查询对象的类型为IQueryable< anonymous-type>.获得IQueryable< MyQuery>你需要将你的选择更改为:
var query = _ABC.Table
.Join(_DEF.Table, cef => ...etc... })
.Join(_GHI.Table, extf => ...etc...})
.Select(jcefn=> new MyObject(){ XYZ = jcefn....etc...});
您不需要.ToList()将其转换为IQueryable,它已经是.
但是,如果您确实希望在将IQueriable传递给函数之前执行并缓存它,那么您可以这样做
var cachedQuery = query.ToList();
var FPaged = new PagedList<MyObject>(cachedQuery.AsQueryAble<MyObject>(), pageIndex, pageSize);
在大多数情况下,这不是你想要的. PagedList最有可能需要IQueryable,因为它只会检索特定页面当前所需的部分数据,而在数据库中将剩下的潜在巨大数据集留在查询后面.
但是如果你真的想要只检索一次所有数据,然后再把它变成一个PagedList,这就是你要走的路.然后,您还可以在其他位置重用cachedQuery,而不会导致其他数据库检索.
内容总结
以上是互联网集市为您收集整理的c# – 将LINQ匿名类型转换为IList <>时出错全部内容,希望文章能够帮你解决c# – 将LINQ匿名类型转换为IList <>时出错所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。