C# LINQ使用Distinct方法检查对象某个属性的值是否重复

  C# LINQ使用Distinct方法检查对象某个属性的值是否重复


C# LINQ使用Distinct方法检查对象某个属性的值是否重复



方案一:采用GroupBy方式, Count()>1为重复对象


C# Code:

List<tb_TablesDetail> list = gcStuct.DataSource as List<tb_TablesDetail>;

var query = list.GroupBy(x => x.FieldName.ToUpper())//区分大小写,转换为大写
.Where(g => g.Count() > 1)
.Select(y
=> y.Key)
.ToList();

if (query.Count>0)
{
  
var strFields = String.Join(",", query.ToArray());//连接重复的字段
  
Msg.Warning($"字段名<{strFields}>重复,请检查!");
  
return;
}


//来源:C/S框架网 | www.csframework.com | QQ:23404761




方案二:采用Distinct方式,然后比较对象数量是否一致


C# Code:

List<tb_TablesDetail> list = gcStuct.DataSource as List<tb_TablesDetail>;
var fields = list.Select(a => a.FieldName).Distinct();
if (fields.Count() != list.Count)
{
  Msg.Warning(
"字段名称重复,请检查!");
  
return;
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




方案三:采用Distinct方法,自定义比较对象的模型与算法



C# Code:

//LINQ使用Distinct方法检查对象某个属性的值是否重复
var q = list.Distinct(new DataCompareModel());
if (q.Count() < list.Count)
{
  
string msg = "{\"status\":0, \"msg\":\"字段名称有重复,请检查!\"}";
  context.Response.Write(msg);
  
return;
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




C# Code:

/// <summary>
/// 对象比较
/// </summary>
public class DataCompareModel : IEqualityComparer<libs.ExcelDataModel>
{
  
public bool Equals(libs.ExcelDataModel x, libs.ExcelDataModel y)
  {
    
return x.FieldName.CompareTo(y.FieldName) == 0;
  }
  
  
public int GetHashCode(libs.ExcelDataModel obj)
  {
    
return this.GetHashCode();
  }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

C# LINQ使用Distinct方法检查对象某个属性是否重复
检查Datatable表指定字段是否重复|C/S框架网
C# 克隆对象、复制对象(浅拷贝)、复制对象相同属性
C# GridView 资料行数据检查使用方法(ValidateRow与InvalidRowException)
C# LINQ 找出两个列表数组中不存在于某个list元素
标签:C#.Net组件开发 - 自定义属性编辑器持久化对象属性
C# get和set访问器:获取和设置字段(属性
C#.NET扩展动态对象支持动态属性方法以及Json格式与对象互转
C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象
C#.NET 定义动态对象dynamic以及属性方法
标签:C#.Net组件开发 - 自定义设计器持久化对象属性
SetPropertyValue 给对象属性赋值
IDatabase.ExecuteReader返回对象列表Func泛型函数使用方法
对象属性使用get;set;访问器没有指定成员变量,代码混淆后会丢失数据
C#类扩展方法,字符串对象转换,常用扩展方法StringExtensions
C/S开发框架数据访问层用LINQ吗?
通过反射,调用DLL程序集某个静态方法打开窗体
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
关于SetEditorBindingValue方法使用
C#面向对象设计(OOP)之对象多态(Polymorphic)