连续两次被相同问题困扰。

一、举例

var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>new {SubjectId=SubjectId,Score=g.Score}).ToList();
 
这是一段平常的代码,但有时候他会报错:匿名类无法转换为实体类StudentScore。
 
1期初,我是这么想的:
 new StudentScore
var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>new StudentScore {SubjectId=SubjectId,Score=g.Score}).ToList();
但还是报错!原因还是匿名类无法转换为实体类StudentScore。
问:为什么不能转换为自己呢?答: 难道因为实体类中有外键或者字段数量上不匹配吗。。
 
2 新建了一个类
StudentScoreTemp   就两个属性 SubjectId、 Score
var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>new StudentScoreTemp   {SubjectId=SubjectId,Score=g.Score}).ToList();
转换成功。
 
3后来发现CSDN 已经有答案 https://bbs.csdn.net/topics/390777388
其中还记录了另一种方法:query就是个集合,你遍历就行了
foreach(var v in query)  遍历的时候按自己需要重新组装成需要的形式。
 
4还发现了一个错误的方法:
var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).AsEnumerable().Select(new StudentScoreTemp() { ... }).ToList()
错误原因:
AsEnumerable() 时会去数据库查询数据,相当于把数据先查询出来到内存中,再在内存中通过Select筛选。如果数据量较大是非常消耗内存的!
原因详情见 :https://www.cnblogs.com/joeatgz/p/5180788.html
 
5 新发现
var query=db.StudentScore.Where(r=> r.SubjectId==subjectId).Select(g=>g).ToList();
 这样可以查询所有字段
 
6 还发现  Select的时候,时间无法转换成 年月日  YYMMMdd
解决1:先ToList到内存,然后再次Select时可以转换。
解决2:  先匿名类接收数据, foreach循环或for 循环遍历的时候按自己需要重新组装成需要的形式。(3中的发现是有用滴!)
 
7 又发现EF复杂查询好难呀!
这是对EF拉姆达表达式和linq语法不熟悉是很费时间的,其实可以
1直接在数据库中创建视图。
2EF也可以直接写sql语句

  //1)查询SqlQuery

  result.slList = db.Database.SqlQuery<DataTemp>("select Precision,Year,LandCover, sum(Area) as Area  from [EcoTypes]  where  LandCover=@type group by Precision, Year, LandCover", new SqlParameter("@type", "森林")).Select(d=> d.Area).ToList();

//2)增删改:ExecuteSqlCommand

db.Database.ExecuteSqlCommand("").ToString();

 
解决问题的一般流程总结:
1自己想
2百度
3官网文档
4问大神
 

EF select 匿名类 问题的更多相关文章

  1. C# MVC EF中匿名类使用

    控制器中代码: var list = context.Says.Join( context.Users, a => a.UserId, b => b.Id, (a, b) => ne ...

  2. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...

  3. 读取ViewBag匿名类

    关于遍历 viewBag匿名类错误 EF tt生成的类 明明有值眼睁睁看着 却不认识 public ActionResult Index() { MyTestEntities1 db = new My ...

  4. MVC匿名类传值学习

    刚接触MVC+EF框架不久,但一直很困惑的就是控制器能否及如何向视图传递匿名类数据.宝宝表示很讨厌去新建实体类啦,查询稍有不同就去建一个实体类不是很麻烦吗,故趁阳光正好,周末睡到自然醒后起来尝试了之前 ...

  5. HttpCookie加匿名类实现多语言

    突然想做一个多语言网站,确不知道怎么实现好,突然想到了HttpCookie,然后页面后台用匿名类实现语言的储存. string lan = Request["str_lan"]; ...

  6. Linq之隐式类型、自动属性、初始化器、匿名类

    目录 写在前面 系列文章 隐式类型 自动属性 初始化器 匿名类 总结 写在前面 上篇文章是本系列的小插曲,也是在项目中遇到,觉得有必要总结一下,就顺手写在了博客中,也希望能帮到一些朋友.本文将继续介绍 ...

  7. .net学习之新语法学习(匿名类和匿名方法,扩展方法,系统内置委托,Lambda表达式和linq等)

    1.自动属性 Auto-Implemented Properties 2.隐式类型 var  var变量不能作为全局变量使用,因为不能在编译时确定类型 3.参数默认值 和 命名参数 4.对象初始化器 ...

  8. silverlight datagrid绑定匿名类

    原文 http://www.cnblogs.com/luweis/archive/2011/10/21/2220587.html 刚开始遇到的一个问题是这样的,我有一个datagrid,根据不同的条件 ...

  9. C# 3.0 / C# 3.5 对象集合初始化器、匿名类

    对象集合初始化器 在 .NET 2.0 中构造一个对象的方法一是提供一个重载的构造函数,二是用默认的构造函数生成一个对象,然后对其属性进行赋值. 在 .NET 3.5/C# 3.0 中,我们有一种更好 ...

随机推荐

  1. ABP框架系列之三十五:(MVC-Controllers-MVC控制器)

    Introduction ASP.NET Boilerplate is integrated to ASP.NET MVC Controllers via Abp.Web.Mvc nuget pack ...

  2. 软件推荐-c#绘图插件echart

    首先给出官网:http://echarts.baidu.com/examples/ 简单的教程:http://www.cnblogs.com/youmeng/p/4874897.html

  3. JavaScript基础视频教程总结(041-050章)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. A - 饭卡

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  5. 消息中间件——kafka

    1.1.1 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信.对 ...

  6. 附加题2 :git 简单练习

    目的: 练习git 基本操作 理解版本管理 Task 1:在码云上新建一个项目,项目命名 『Helloworld』 ,设置为公开访问. step 0: 在你计算机安装git.参照互联网教程<gi ...

  7. iOS逆向之iOSOpenDev

    上篇谈到使用TheOS进行越狱开发,但是流程相对而言较复杂,本篇我们谈一下iOSOpenDev进行越狱开发.通过使用iOSOpenDev,我们可以使用Xcode进行开发.编译.生成并运行到设备上. 1 ...

  8. 6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】

    这篇文章,我将带领大家学习HTML Helper.[PS:上一篇-->5.ASP.NET MVC 中的Area[区域]是什么] HTML Helpers是用来创建HTML标签进而创建HTML控件 ...

  9. rpm is for architecture aarch64 ; the package cannot be built on this system

    问题:rpm is for architecture aarch64 ; the package cannot be built on this system $ sudo alien --to-de ...

  10. linux安装方式

    一.rpm包安装方式步骤:  1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd soft.version.rpm所 ...