gpt4 book ai didi

c# - 我怎样才能选择一个记录而不是另一个记录?

转载 作者:行者123 更新时间:2023-11-30 17:52:54 26 4
gpt4 key购买 nike

我有一个列表,其中有一些重复项。

Row#    Lineid  ItemDescItemId  RoadTax VehicleId   Amount
1 122317 None -1 26.63 -78603 300
2 122317 None -2 17.75 -78603 200
3 122317 None -1 22.19 -78602 250
4 122317 Deli -2 17.75 -78603 200

在这种情况下,第 2 行与第 4 行重复,因为 LineId、RoadTax、Amount 和 VehicleId 匹配。但是,我想保留带有项目描述的行并删除第 2 行。所以我的输出列表如下所示:

Row#    Lineid  ItemDesc ItemId RoadTax VehicleId   Amount
1 122317 None -1 26.63 -78603 300
3 122317 None -1 22.19 -78602 250
4 122317 Deli -2 17.75 -78603 200

我写了一个IEqualityComparer基于 MSDN 上示例的类。该类看起来像这样:

  public class RoadTaxComparer : IEqualityComparer<RoadTaxDto>
{
// Items are equal if ItemId / VehicleId / RoadTax are equal.
public bool Equals(RoadTaxDto x, RoadTaxDto y)
{

//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;

//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;

//Check whether the products' properties are equal.
return x.VehicleId == y.VehicleId && x.ItemId == y.ItemId && x.RoadTax == y.RoadTax && x.Amount == y.Amount;
}

// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.

public int GetHashCode(RoadTaxDto roadTaxDto)
{
//Check whether the object is null
if (Object.ReferenceEquals(roadTaxDto, null)) return 0;

//Get hash code for the VehicleId.
int hashVehicleId = roadTaxDto.VehicleId.GetHashCode();

//Get hash code for the ItemId field.
int hashCodeItemId = roadTaxDto.ItemId.GetHashCode();

//Calculate the hash code for the QuoteTaxDto.
return hashVehicleId ^ hashCodeItemId;
}

}

RoadTaxDto 结构如下所示:

class RoadTaxDto
{
public int LineId {get;set}
public string ItemDesc {get;set;}
public int VehicleId {get;set;}
public decimal RoadTax {get;set;}
public int VehicleId {get;set;}
public decimal Amount {get;set;}
}

我使用以下命令来消除重复项。

List<RoadTaxDto> mergedList = RoadTaxes.Union(RoadTaxes, new RoadTaxComparer()).ToList();

当我在其上运行比较器时,我不能保证第 2 行已被删除。那么我如何才能确保如果一条记录有重复项,则显示“无”的记录将始终从列表中删除。

最佳答案

我会将 GetHashCode() 移动到 RoadTaxDto,然后执行此操作:

foreach (var g in list.GroupBy(i => i.GetHashCode()))
list2.Add(
g.FirstOrDefault(i => i.ItemDesc != "None") ??
g.First());

关于c# - 我怎样才能选择一个记录而不是另一个记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com