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-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件?
			
ylbtech-Java-Runoob-高级教程-实例-环境设置实例:2.Java 实例 – Java 如何运行一个编译过的类文件? 1.返回顶部 1. Java 实例 - 如何执行编译过 Java ...
 - MySQL转Oracle,MyBatis Mapper XML 文件修改项总结
			
1.对于批量插入 需要更改成 <insert id="saveAll"> insert into(a,b,c) <foreach collection=" ...
 - 个人tools封装
			
/** * jQuery 扩展 */(function ($) { $.fn.extend({ /** * 目标为任意对象元素 * 同时绑定单击和双击事件 */ bindClick: function ...
 - vs启动项目提示Web 服务器被配置为不列出此目录的内容。
			
解决方法 确认网站或应用程序配置文件中的 configuration/system.webServer/directoryBrowse@enabled 属性已设置为 true. 配置一下web.con ...
 - 迷你MVVM框架 avalonjs 0.92发布
			
本版本最大的改进是引入ms-class的新风格支持,以前的不支持大写类名及多个类名同时操作,新风格支持了.还有对2维监控数组的支持.并着手修复UI框架. 重构 class, hover, active ...
 - 在制MO未取到FP
			
原因:今天在制MO未取进去原因为业务人员维护验货客户尾缀时维护ZZ导致,需更新为C开头即可 SELECT * FROM IN_SFCHEADER WHERE MO_ID in('00110051832 ...
 - [JAVA][StringUtils]字符串工具类的常用方
			
StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 ...
 - 「红米 2A 标准版」闪屏救砖、更正官方线刷救砖工具
			
问题描述 用 ES 浏览器 卸载了内置软件后重启无法开机,停在 MI android 界面并出现屏幕忽明忽暗的现象,无法进入系统. 漫长的救砖探索,直白的解决方案 总体来说,林林总总下了六个 G 的教 ...
 - Qt Read and Write Csv File
			
This page discusses various available options for working with csv documents in your Qt application. ...
 - centos6.5下使用yum完美搭建LNMP环境(php5.6)
			
准备工作 配置防火墙,开启80端口.3306端口删除原有的 iptables , 添加合适的配置 rm -rf /etc/sysconfig/iptables vi /etc/sysconfig/ip ...