/// <summary>
/// 实体差异比较器
/// </summary>
/// <param name="source">源版本实体</param>
/// <param name="current">当前版本实体</param>
/// <returns>true 存在变更 false 未变更</returns>
protected static bool DifferenceComparison<T1, T2>(T1 source, T2 current,List<string> exclude) where T1 : MBase where T2 : MBase
{
Type t1 = source.GetType();
Type t2 = current.GetType();
PropertyInfo[] property1 = t1.GetProperties();
//排除主键和基础字段
//List<string> exclude = new List<string>() { "Id", "InsertTime", "UpdateTime", "DeleteTime", "Mark", "Version", "Code" };
foreach (PropertyInfo p in property1)
{
string name = p.Name;
if (exclude.Contains(name)) { continue; }
string value1 = p.GetValue(source, null)?.ToString();
string value2 = t2.GetProperty(name)?.GetValue(current, null)?.ToString();
if (value1 != value2)
{
return true;
}
}
return false;
}
/// <summary>
/// 集合差异比较器,比较两个实体集合值是否一样
/// </summary>
/// <param name="source">源版本实体集合</param>
/// <param name="current">当前版本实体集合</param>
/// <returns>true 存在变更 false 未变更</returns>
protected static bool DifferenceComparison<T1, T2>(List<T1> source, List<T2> current) where T1 : MBase where T2 : MBase
{
if (source.Count != current.Count) { return true; }
for (int i = ; i < source.Count; i++)
{
bool flag = DifferenceComparison(source[i], current[i]);
if (flag) { return flag; }
}
return false;
}
/// <summary>
/// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值)
/// </summary>
/// <param name="model1">实体1</param>
/// <param name="model2">实体2</param>
/// <returns>赋值后的model1</returns>
protected static T1 BindModelValue<T1, T2>(T1 model1, T2 model2) where T1 : class where T2 : class
{
Type t1 = model1.GetType();
Type t2 = model2.GetType();
PropertyInfo[] property2 = t2.GetProperties();
//排除主键
List<string> exclude = new List<string>() { "Id" };
foreach (PropertyInfo p in property2)
{
if (exclude.Contains(p.Name)) { continue; }
t1.GetProperty(p.Name)?.SetValue(model1, p.GetValue(model2, null));
}
return model1;
}
List<string> exclude用于排除实体中的字段,这些字段将不参与比较

C# 实体/集合差异比较,比较两个实体或集合值是否一样,将实体2的值动态赋值给实体1(名称一样的属性进行赋值)的更多相关文章

  1. [Python3] 013 集合:你不能两次进入同一个集合

    目录 0. 集合的独白 1. 集合的创建 2. 集合的特性 (1) 概述 (2) 少废话,上例子 3. 集合的遍历 4. 集合内涵 5. 集合的内置方法 6. 可供集合使用的一些方法/函数 (1) 又 ...

  2. 实体类相同属性间赋值与如何判断实体类中是否所有的字段都为null

    1,实体类相同属性间赋值 /// <summary> /// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值) /// </summary> /// <param ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (10) -----第二章 实体数据建模基础之两实体间Is-a和Has-a关系建模、嵌入值映射

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-11 两实体间Is-a和Has-a关系建模 问题 你有两张有Is-a和Has-a ...

  4. JAVA 集合 List 分组的两种方法

    CSDN日报20170219--<程序员的沟通之痛> [技术直播]揭开人工智能神秘的面纱 程序员1月书讯 云端应用征文大赛,秀绝招,赢无人机! JAVA 集合 List 分组的两种方法 2 ...

  5. Code First02---CodeFirst配置实体与数据库映射的两种方式

    Code First有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另一种是Fluent API. 这两种方式分别是什么呢?下面进行一一解释: DataAnnotation ...

  6. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

  7. java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作

    在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 //在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 List<String> a ...

  8. Collection两个常见的集合类型: ArrayList可重复集有序 ,HashSet不可重复集

    package seday11; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; ...

  9. Java 集合详解 | 一篇文章解决Java 三大集合

    更好阅读体验:Java 集合详解 | 一篇文章搞定Java 三大集合 好看的皮囊像是一个个容器,有趣的灵魂像是容器里的数据.接下来讲解Java集合数据容器. 文章篇幅有点长,还请耐心阅读.如只是为了解 ...

随机推荐

  1. FineUI开源版(ASP.Net)初学手册-部分JS整理

    有人老找JS,我吧FineUI自己写的JS沾过来方便大家看看,在实现前端的时候更灵活   JS 实例 注释 控件 F.ready F.ready(function(){}); 就是ready 很多方法 ...

  2. TensorFlow中的通信机制——Rendezvous(二)gRPC传输

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 本篇是TensorFlow通信机制系列的第二篇文章,主要梳理使用gRPC网络传 ...

  3. 第3章 NFS基本应用

    1.1 概述 类似ext家族.xfs格式的本地文件系统,它们都是通过单个文件名称空间(name space)来包含很多文件,并提供基本的文件管理和空间分配功能.而文件是存放在文件系统中(上述名称空间内 ...

  4. vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)

    备注:(理论部分参考王春海老师的课程) 一.概述 1.vsphere数据中心当处于某种目的进行维护时,需要将某台主机上运行或关闭的虚拟机,迁移到其他主机上,这个时候就需要使用迁移 2.可以使用冷迁移或 ...

  5. Spark学习(一)

    一.启动Spark 1.standalone模式 方法一: (1)启动主节点 ./sbin/start-master.sh 访问http://127.0.0.1:8080,得到如下页面 注意标记到的链 ...

  6. Entity Framework Core 中文入门文档

    点击链接查看文档: Entity Framework Core 中文入门文档

  7. ife2018 零基础学院 day 3

    ife2018 零基础学院 第三天:让简历有点色彩 什么是CSS,CSS是如何工作的! 摘自CSS如何工作 什么是CSS CSS是一种用于向用户指定文档如何呈现的语言 - 它们如何被指定样式.布局等. ...

  8. c# 画布验证码

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. Tesseract 引擎翻译

    Tesseract 引擎翻译 Category: 图像识别 Last Edited: Sep 17, 2018 10:29 AM Tags: tesseract,字符识别,翻译 1.英文原文(中文翻译 ...

  10. ASP.NET MVC 学习笔记-5.Controller与View的数据传递

    ViewData属性 ViewData属性是System.Web.Mvc.ControllerBase中的一个属性,它相当于一个数据字典.Controller中向该字典写入数据,ViewData[“K ...