热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

EF两表连接查询,返回结果集无对应实体类,如何处理?

ASP.NETMVC+EF项目,后台进行一个数据统计,2个表连接查询,只取其中的一些字段,返回的结果没有对应的实体类,应该返回什么类型?Controller中应该怎么进行转换处理?
ASP.NET MVC+EF 项目,后台进行一个数据统计,2个表连接查询,只取其中的一些字段,返回的结果没有对应的实体类,应该返回什么类型?Controller中应该怎么进行转换处理?

16 个解决方案

#1


哪位大神指导一下?

#2


只取其中的一些字段 不就是new一个匿名类吗 直接用var接收多省事 

#3


SELECT NEW {你查询的字段=字段}; LINQ

#4


@SayHello_XXXX  你说的是这个直接写在Controller里吗?我的目前是写在DAL层的

#5


@peng2739956 有具体的例子吗?

#6


我所知道的有3种方法:
1. 自己写个类 专门用来接收这个查询的结果 然后到Controller自己做个Mapping 变成你前端所需要的数据结构
2. 就像3L说的用匿名函数 最后你那个查询方法的返回值就是object或者dynamic 然后Controller调用后用dynamic类型接收,然后就随意了
3. 用 EF code first 配置好实体类和数据库映射关系 然后查询的时候直接用主表的dbset对象并用Include方法把从表的导航属性包含进来 这样你就可以得到主从两张表的数据了 访问从表数据用导航属性直接访问就行 不过这样会把你不需要的字段也一起查出来 数据量大的时候可能会影响性能

如果以上有看不懂地方请自行百度或google 

#7


没有就按照你要的字段写一个类,然后select到这个类再传递到view

#8


可以用你需要的字段重新写一个实体类,或者在查询时new匿名类来存数据!比如你只需要id和name查询返回匿名类,select new {id=Id,name=name} 

#9


比较标准的形式(考虑到工程需要复用并且需要强稳定性),是 从界面出发来设计实体,而不是从数据库表出发来设计实体。根据你的界面设计需求模式,通过分析综合,最后抽象出几种从粗略到详细的不同程度的实体对象。比如说对于“工作”这个概念来说,你可以分成4层,从最基本的工作(包括工作的发起人、发起时间、前一个工作id、工作当前存在状态、推送给什么人,等等),到具体一些各自有各自的特点的不同工作表单,中间你可以再分2层来表示不同的详细程度的实体。

从需求出发,而不是从数据库表出发,来设计实体,那么后续开发中你就不会怀疑自己的实体设计,不会心里总是生怕变繁琐了。实际上把具体的事情搞定,后续开发其实很快。你很少遇到“结果集无对应实体类”的问题,因为你出发点一直目的性很强,一开始就是围绕需求来设计详细程度不同的(对相同实体分不同层次的)实体。

那么反过来,假设不需要太认真,不需要保证高强度的稳定性(将来经常修改、出了问题总是可以事后补救,而不需要保证有稳定结构),那么你就可以使用运行时动态类型。例如 ExpandoObject 等等类型(通常使用 dynamic 来声明引用此类对象实例的变量),来进行动态编程。动态编程的问题当然就是不能保证静态编译检查,从而在用户面前出了 bug 你才知道有 bug。

#10


var q=.........
学会使用var 

#11


当你的实体定义为 ExpandoObject 或者 List 类型,在 View 中就可以用asp.net mvc 的 model dynamic 声明来使用它的动态字段。

例如代码 
var obj = new ExpandoObject();
var dic = (IDictionary)obj;
dic["name"] = "张三";
dic["dateTime"] = DateTime.Now;
dic["long"] = 20.5;
dic["sub"] = new int[] { 2, 3, 19, 888 };

就可以使用
dynamic xx = obj;
var s = (string)xx.name;
var a = (int[])xx.sub;

这种、与普通 c# 代码无异的语句来绑定数据,编译器可以编译通过(但是很显然在检查错误方面是极弱的)。

#12


不过编程语句其实不是很重要,如果能从工程上去理解就更好了。

#13


总有人满脑子只有数据库表,因此对于“查询结果”无论如何也理解不了需要对应实体。

实际上,MVC 的实体 M 就是要主要用来对应各种查询的。你不能说数据库表有什么你就只知道这些实体,你的界面View需要两表查询结果、需要什么模式的数据源,你就应该单独设计这个数据源的实体模型。

从这个角度出发主动去设计各种查询实体,这才是 MVC 的基础。

#14


用了EF还用数据库表驱动法思考问题就不对了。

用户列表,需要显示用户名和角色名称怎么办?

数据库表驱动法就是inner join User、Role两个表显示。

EF是用导航属性的方式,返回User,但是Include Roles属性

#15


比较简单的方法就是在数据库建视图...查询视图就可以了.

#16


该回复于2017-09-05 09:43:47被管理员删除

推荐阅读
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • vue使用
    关键词: ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • ScrollView嵌套Collectionview无痕衔接四向滚动,支持自定义TitleView
    本文介绍了如何实现ScrollView嵌套Collectionview无痕衔接四向滚动,并支持自定义TitleView。通过使用MainScrollView作为最底层,headView作为上部分,TitleView作为中间部分,Collectionview作为下面部分,实现了滚动效果。同时还介绍了使用runtime拦截_notifyDidScroll方法来实现滚动代理的方法。具体实现代码可以在github地址中找到。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
author-avatar
NarratorWang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有