【问题标题】:C# How to filter list of type T to return only new data [duplicate]C#如何过滤类型T的列表以仅返回新数据[重复]
【发布时间】:2020-07-14 05:51:51
【问题描述】:

我试图在我的系统中创建一个过滤器功能,这样我就可以调用这个函数来过滤重复项。经过 2 天的尝试,我感到很沮丧,因为我无法让它发挥作用。老实说,我什至不知道我做得对还是可能。

它的工作方式是我从另一个函数调用“过滤器”函数。过滤器函数有 2 个参数。 1 是现有的项目列表。 2 是包含新数据的列表。这就是我调用函数的方式

List<RdwDamageTable> Existing = await _context.RdwDamageTable.ToListAsync();
List<RdwDamageTable> Data = jsonArray.ToObject<List<RdwDamageTable>>();
List<RdwDamageTable> ToInsert = Sys.BaseFunctions.FilterDuplicate(Existing , Data);

Filter 函数现在看起来像这样。

public static List<T> FilterDuplicate<T>(List<T> Existing, List<T> New)
{
    return null;
}

再次,我想看看新列表是否包含现有没有的新项目,因此我可以返回新对象列表。

希望有人能提供帮助。

【问题讨论】:

标签: c# list filter


【解决方案1】:
using System.Linq; // needed at the top somewhere
// ...
public static List<T> FilterDuplicate<T>(List<T> Existing, List<T> New)
    => New.Except(Existing).ToList();

【讨论】:

  • 由于某些原因这不起作用。我试过了,过滤后的列表仍然包含旧数据
  • @NickGlas 你的相等语义是什么?它们是相同的对象吗?还是看起来很相似的不同对象?
  • 嘿@MarcGravell 列表是一样的。唯一不同的是我从数据库加载现有数据。所以唯一额外的就是 id 字段不是吗?
  • @Nick 这不是对象相等的工作方式。如果它们不是完全相同的对象 instance,那么您需要自己单独定义相等性。这涉及覆盖 Equals 和 GetHashCode,并在理想情况下实现 IEquatable-T
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2021-08-24
相关资源
最近更新 更多