在用linq写代码时,可能会用到去重的功能。若只是string类型的还好,则可通过如下的代码进行去重:
var testList = (from r in realresultList select r).Distinct<string>().toList<string>();
但若realresultList
中包含的是类,则需要对类进行处理。那就用到了IEqualityComparer
接口。
具体实现如下:
1、先定义自己的model
public class QueryCommentModel
{
public string NurseStation { get; set; }
public string DeptID { get; set; }
public string DeptName { get; set; }
public string PharmacistID { get; set; }
public string PharmacistName { get; set; }
public string OrderCount { get; set; }
public string RightCommentStatus { get; set; }
public string ErrorCommentStatus { get; set; }
}
2、实现接口
public class QueryCommentModelComparer : IEqualityComparer<QueryCommentModel>
{
//实现具体的比较逻辑(与实际业务相关)
public bool Equals(QueryCommentModel x, QueryCommentModel y)
{
bool checkFlag = true;
if (Object.ReferenceEquals(x, y))
{
checkFlag = true;
}
else if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
{
checkFlag = false;
}
else
{
if (x.NurseStation == y.NurseStation && x.DeptID == y.DeptID && x.PharmacistID == y.PharmacistID)
{
checkFlag = true;
}
else
{
checkFlag = false;
}
}
return checkFlag;
}
//实现获取哈希值
public int GetHashCode(QueryCommentModel model)
{
if (Object.ReferenceEquals(model, null)) return 0;
int hashNurse = model.NurseStation.GetHashCode();
int hashDeptID = model.DeptID.GetHashCode();
int hashPharmacist = model.PharmacistID.GetHashCode();
return hashNurse ^ hashDeptID ^ hashPharmacist;
}
}
3、在业务代码中实现
//通过比较器,实现类的去重
var testList = (from r in realresultList select r).Distinct<QueryCommentModel>(new QueryCommentModelComparer()).ToList<QueryCommentModel>();