Linq使用中的ToList注意事项
在使用Linq时,如果查询逻辑太复杂,可以拆分为多个Linq查询,下一个Linq在上一个Linq查询的结果上继续操作,这样逻辑清晰,又不会出错。但在使用ToList的时候需要注意,最常见碰到的错误是:
LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[xxx] ToList[xxx](System.Collections.Generic.IEnumerable`1[xxx])' method, and this method cannot be translated into a store expression.
今天碰到的这个错误纠结了我好久,不管怎么样,就是不给ToList。
ToList 就是把LINQ查询结果放在内存中,想到这里就明白了,下一个Linq要使用上一个Linq的查询结果,如果select new 后面什么都没有,是使用的匿名类,那你尽可放心地使用。如果new后面是一个类,这就得注意了,下一个Linq在使用上一个Linq的结果时需要把查询结果放在内存中再使用,否则就会报错。至于为啥要放进去,估计原因就是内存中堆栈神马的。具体原因有待探究。贴点代码做个示例就结束随笔了:
var examscore = query1.FirstOrDefault();
if (examscore == null)
return new ExamScorePrintModel(); var query2 = from si in _examScoreItemRepository.Table
join sc in _examScoreCourseRepository.Table on si.Id equals sc.ExamScoreItemId
let course = sc.ExamCourse
where si.ExamScoreId == examscore.ExamScoreId
select new RecordItem
{
ExamScoreItemId = si.Id,
DeductedScores = sc.DeductedScores,
Remark = sc.Remark,
CourseName = course.CourseName,
};
var items = query2.ToList();
var query3 = from q in items
group q by q.ExamScoreItemId
into grouping
select new ExamRecord
{
ExamScoreItemId = grouping.Key,
RecordItems = grouping.ToList(),
};
examscore.ExamRecords = query3.ToList();
Linq使用中的ToList注意事项的更多相关文章
- Linq中的ToList()和CopyToDataTable()
最近在项目中使用了Linq,想把Linq的查询结果直接转换成DataTable对象,通过查找发现Linq有一个CopyToDataTable<T>的泛型方法,该方法只能在T是DataRow ...
- LINQ to Entities 查询注意事项
1> 排序信息丢失 如果在排序操作之后执行了任何其他操作,则不能保证这些附加操作中会保留排序结果.这些操作包括 Select 和 Where 等.另外,采用表达式作为输入参数的 First 和 ...
- linq list select用法注意事项
下面是我自己做的一个例子 List<CR_CustomerOrder> OrdList = new List<CR_CustomerOrder>(); var b = OrdL ...
- java中null是什么,以及使用中要注意的事项
1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...
- robotframework使用中的一些注意事项
1.关于\的转义.使用\\ 2.关于字符串的合并 3.切换到iframe,切出iframe 4.对对象右键点击 5.对对象实现按键操作,在处理一些下拉对象时需要用到. 6.当元素定位十分困难的时候,需 ...
- BigDecimal使用中的一些注意事项
Java的商业计算,不能用float和double,因为他们无法进行精确计算.但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计 ...
- Ubuntu安装使用中的一些注意事项
在win7上安装VMware workstations10.0 ,在VMware workstations10.0上安装Ubuntu14.04 64位时,关于网络的连接注意: win7 网络连接里上的 ...
- ToDictionary() and ToList()
ToDictionary() and ToList() 前言: 有两个简单好用的LINQ扩展方法 ToDictionary() 和ToList(),你可能知道或不知道,但是它的的确确可以简化查询转化为 ...
- [译文]c# /.Net 技巧: ToDictionary() and ToList()
前言: 有两个简单好用的LINQ扩展方法 ToDictionary() 和ToList(),你可能知道或不知道,但是它的的确确可以简化查询转化为集合的任务: 简介: LINQ和延迟执行 据你所认识的L ...
随机推荐
- Java 数组类型转字符串类型
Java手册 String public String() 初始化一个新创建的 String 对象,使其表示一个空字符序列.注意,由于 String 是不可变的,所以无需使用此构造方法. String ...
- [转]Acrylic DNS Proxy 使用方法
本文转自:http://www.cnwyw.net/index.php/acrylic-dns-proxy-ping-bi-guang-gao/ 从开始菜单进行“Edit Configuration ...
- CentOS下查看最后登录的用户信息以及LOG记录
CentOS下查看最后登录的用户信息tail /var/log/messagestail /var/log/secure 我们知道,在redhat下可以用lastlog查看各用户最后登录的信息,用la ...
- VPS(Centos6)连ROS做GRE隧道完整版
国内徐庄1.1.1.1 内网地址192.168.0.0/16 gre隧道适配器地址 172.16.0.45 国外2.2.2.2内网地址无 gre隧道地址172.16.0.46 国外 cent ...
- 机器学习中的python常用函数
glob模块 说明: 1.glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索, 支持通配符操作 *.?.[] 这三个通配符,*代表0 ...
- 读到的"关于授权"
关于授权 记得公司刚有十几个人的时候,全公司我最忙,经常同时接两三个销售电话,还得安排送货,结账,进货,每天来得最早,走得最晚.一次我弟弟到公司,看了半天,发表感慨说:"哥我怎么觉得你在养活 ...
- CVE-2018-8420 漏洞复现
影响的 Windows 版本: Microsoft Windows 10 Version 1607 for 32-bit SystemsMicrosoft Windows 10 Version 160 ...
- Python写一个目录检索器
前言: 昨天看了Demon哥发的干货,有了次篇博文 干货链接: https://www.soffensive.com/2018/06/exploiting-blind-file-reads-path. ...
- 登录PL/SQL无法登录,提示错误:ORA-01017: invalid username/password; logon denied 错误
在使用在登录PL/SQL(使用scott用户)无法登录,提示错误:ORA-01017: invalid username/password; logon denied 错误(程序中的用户和密码无法登录 ...
- LevelDB 读取记录
[LevelDB 读取记录] LevelDb是针对大规模Key/Value数据的单机存储库,从应用的角度来看,LevelDb就是一个存储工具.而作为称职的存储工具,常见的调用接口无非是新增KV,删除K ...