问:

在实际开发中,特别是在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关键字传输数据的用法的更多相关文章

  1. C# 动态语言特性,dynamic 关键字研究

    1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...

  2. C#中Dynamic关键字

    dynamic关键字和动态语言运行时(DLR)是.Net 4.0中新增的功能. 什么是"动态"? 编程语言有时可以划分为静态类型化语言和动态类型化语言.C#和Java经常被认为是静 ...

  3. js之字面量、对象字面量的访问、关键字in的用法

    一:字面量含义 字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量. 字面量分为字符串字面量(string literal ).数组字面量(array literal) ...

  4. 浅谈Dynamic 关键字系列之一:dynamic 就是Object(转)

    C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { d ...

  5. dynamic关键字

    public class TestClass { public dynamic Values { get; set; } } public class Test { static void Func( ...

  6. C#中 dynamic 关键字

       所有表达式都能隐式的转换成dynamic,因为所有的表达式最终都能生成从Object派生出的类型. ; int b = a; //隐式转换错误 int b2 = (int)a; ; int b3 ...

  7. C++ new的nothrow关键字和new_handler用法

    C++ new的nothrow关键字和new_handler用法 new && new(std::nothrow) new(std::nothrow) 顾名思义,即不抛出异常,当new ...

  8. C#4.0中的dynamic关键字和ExpandoObject对象

    dynamic最大的特点我想莫过于在它的类型在运行时才确定,这也是它与往静态类型关键字的最大区别.如果你在你的代码操作中用到了dynamic关键字去定义一个变量时,那么这个变量在编译的时候编译器不会对 ...

  9. Swift dynamic关键字

    使用dynamic关键字标记属性,使属性启用Objc的动态转发功能: dynamic只用于类,不能用于结构体和枚举,因为它们没有继承机制,而Objc的动态转发就是根据继承关系来实现转发. 参考资料: ...

随机推荐

  1. 关于微信小程序切换获取不到元素的问题

    1.由于公司要实现微信小程序的自动化,所以开始学习python + appium 实现微信小程序自动化.在学习过程中遇到在切换webview后获取不到页面元素的问题,导致无法继续.今天在网上看到一篇关 ...

  2. JavaWeb(一)-Servlet知识

    一.Servlet简介 Servlet是sun公司提供一门用于开发动态web资源的技术. sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个java程序向浏 ...

  3. RANSAC

    一.概述 RANSAC(RANdom SAmple Consensus)随机抽样一致,是用来从一组观测数据中估计数学模型参数的一种方法.由于是观测数据,避免不了有误差存在,当误差太大了就变成了无效数据 ...

  4. python3+ selenium3开发环境搭建

    环境搭建 基于python3和selenium3做自动化测试,俗话说:工欲善其事必先利其器:没有金刚钻就不揽那瓷器活,磨刀不误砍柴工,因此你必须会搭建基本的开发环境,掌握python基本的语法和一个I ...

  5. fastjson 序列化,反序列化Map对象的顺序问题

    使用JSONObject  读取JSON字符串时,读取出来的数据,通过变量时是无序的. 但是业务希望返回是顺序的. String str="{name:\"A\",add ...

  6. C++枚举类型Enum及C++11强枚举类型用法

    C++中的枚举类型常常和switch配合使用,这里用一个简单的switch控制键盘回调的代码片段来说明枚举的用法: //W A S D 前.后.左.右行走 enum Keydown{ Forward= ...

  7. js打断点

    F12打开调试器         资源sources     找到就是文件    选中需要打断点的行 获得段短点的值:将断点向后执行一步(页面提示的桥状小图标),然后选中上一步需要打断点的值,悬浮在上 ...

  8. maven配置parent pom查找策略

    当我们在pom.xml中添加parent pom的时候,通常maven会按照如下顺序查找parent依赖: relativePath标签指向的路径. 默认的relativePath路径".. ...

  9. css伪元素 ::after ::before

    我遇到的问题: div盒子标签设置了伪元素 ::after  ::before  并给这俩content内容设置了空属性,添加了背景图,发现这两个伪元素没有宽度和高度. 解决方法 给设置伪元素的盒子的 ...

  10. Redis-01.初探

    官网 http://redis.io 中文网 http://redis.cn 命令参考 http://redisdoc.cn Redis(Remote Dictionary Server)是一个开源的 ...