c#使用dynamic关键字传输数据的用法
问:
在实际开发中,特别是在ORM框架的基础下,我们返回的数据都是强类型的实体对象。如果是单表查询我们就可以直接返回对应的实体,如果是多表联合查询,我们可能就需要各个表中都返回一部分字段,组成一个新的数据集合。那么在这种情况下我们该怎么办呢?
答:
传统的方式是我们定义一个新的实体类,作为返回的符合数据的载体。而今天我将介绍一种新的方式,在不用重新定义传输实体的基础上,解决这个问题。
代码如下:
1.首先定义测试数据实体,模拟对应的两张关联表:
public class student
{
public int id { get; set; }
public string name { get; set; }
public int age { get; set; }
}
public class address
{
public int id { get; set; }
public int student_id { get; set; }
public string city { get; set; }
}
2.数据测试方法如下:
public string DynamicTest()
{
List<student> students = new List<student>() {
new student(){ id=,age=,name="jack"},
new student(){ id=,age=,name="tom"},
new student(){ id=,age=,name="lily"},
new student(){ id=,age=,name="wjh"}
}; List<address> addresss = new List<address>() {
new address(){ id=,student_id=,city="北京"},
new address(){ id=,student_id=,city="上海"},
new address(){ id=,student_id=,city="南京"},
new address(){ id=,student_id=,city="苏州"}
}; dynamic data=(from s in students
join a in addresss
on s.id equals a.student_id
where s.age>
select new
{
name = s.name,
city = a.city
}
).ToList(); foreach (var item in data)
{
var s = item.name;
var city = item.city;
} return "s";
}
注意:dynamic 对应的类型运行时才确定,并且生成的是内部类,所以只能在当前程序集中使用,使用dynamic在返回json的场景中使用比较方便。
c#使用dynamic关键字传输数据的用法的更多相关文章
- C# 动态语言特性,dynamic 关键字研究
1 动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...
- C#中Dynamic关键字
dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能. 什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言.C#和Java经常被认为是静 ...
- js之字面量、对象字面量的访问、关键字in的用法
一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...
- 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)
C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...
- dynamic关键字
public class TestClass { public dynamic Values { get; set; } } public class Test { static void Func( ...
- C#中 dynamic 关键字
所有表达式都能隐式的转换成dynamic,因为所有的表达式最终都能生成从Object派生出的类型. ; int b = a; //隐式转换错误 int b2 = (int)a; ; int b3 ...
- C++ new的nothrow关键字和new_handler用法
C++ new的nothrow关键字和new_handler用法 new && new(std::nothrow) new(std::nothrow) 顾名思义,即不抛出异常,当new ...
- C#4.0中的dynamic关键字和ExpandoObject对象
dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...
- Swift dynamic关键字
使用dynamic关键字标记属性,使属性启用Objc的动态转发功能: dynamic只用于类,不能用于结构体和枚举,因为它们没有继承机制,而Objc的动态转发就是根据继承关系来实现转发. 参考资料: ...
随机推荐
- 安卓学习第一节--环境搭建及Android Studio 安装
1.安装JDK 2.安装AS 安装参考网址 https://www.cnblogs.com/xiadewang/p/7820377.html 下载网址: http://www.android-stud ...
- 实际操作--create DB link
我可以查看6D1数据库中的表了:我在哪个表里创建database说明我想访问database中的表~ SELECT * FROM TEST001MX@TESTLINK1 databa ...
- Docker安装nexus
一.Nexus3安装 sudo docker search nexus sudo docker pull sonatype/nexus3 sudo docker images sudo docker ...
- Python 的经典设计格言,格言来源于 Python 但不限于 Python
The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...
- mac 下 tomcat7的安装
1.到 apache官方主页 下载 tomcat7 版本的完整 tar.gz 安装包 解压拷贝到 /Library目录下,并命名为Tomcat. 2.修改目录权限,终端输入 sudo chmod ...
- final,static,abstract
一.final 1.可以修饰属性,表示常量,其值在运行期间不允许改变.常量必须赋初始值,初始值可以在声明出,构造方法的任意一个地方赋 优点:增强程序的可读性,可维护性 2.可以修饰方法,表示该方法不能 ...
- flex弹性盒子布局
一.在需要使用弹性盒子的容器上添加属性:display:flex 或者 display:inline-flex; 二.在父容器上添加flex-direction设置子元素主轴方向: 不写默认值是X轴从 ...
- C#项目学习记录
1, Visual Studio Code 添加VS 2017的开发人员命令提示符---C#编译环境 2, C#编译器和CLI的安装 注意:自己的电脑上配置环境变量时,配置在系统变量的Path中 ...
- 【转】javaUDP套接字通信
Java UDP网络编程 - 最简单示例 转自 http://blog.csdn.net/wintys/article/details/3525643 /** *UDPServer *@autho ...
- fiddler抓包工具总结
Fiddler 抓包工具总结 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也 ...