c# - LINQ 除了没有按预期工作

标签 c# asp.net .net asp.net-mvc linq

<分区>

我有一些方法可以返回过去 360 天、180 天和 90 天未查询的联系人列表。

最近361天没有查询过的人,180天和90天的查询也会返回。

我以为我可以用 Except 来做到这一点,但这肯定行不通,

public class Contacto
{
    public int IdContacto { get; set; }
    public string PrimerApellido { get; set; }
    public string PrimerNombre { get; set; }
    public string SegundoApellido { get; set; }
    public string SegundoNombre { get; set; }
    public object Telefonos { get; set; }
    public int TipoTelefono { get; set; }
    public int IdEstado { get; set; }
    public DateTime? FechaArchivado { get; set; }
    public DateTime? FechaConsulta { get; set; }

GetOldContacts 方法

private static List<Contacto> GetOldContacts(int numberOfDays)
{
    try
    {
        DateTime filter = DateTime.Now.AddDays(-numberOfDays);
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(ConfigurationSettings.Apiurl);
        HttpResponseMessage response = client.GetAsync("api/ContactosDepurar?FechaInicial="+filter.ToShortDateString()).Result;
        if (response.IsSuccessStatusCode)
        {
            return response.Content.ReadAsAsync<List<Contacto>>().Result;
        }
        else
        {
            System.Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase);
            return null;
        }
    }
    catch (Exception ex)
    {
        System.Console.WriteLine(ex.Message);
        return null;
    }

}

还有我的 Except 逻辑

IEnumerable<Contacto> contactosDoceMeses = GetOldContacts(ConfigurationSettings.Ciclo3Dias);
IEnumerable<Contacto> contactosSeisMeses = GetOldContacts(ConfigurationSettings.Ciclo2Dias).Except<Contacto>(contactosDoceMeses);
IEnumerable<Contacto> contactosTresMeses = GetOldContacts(ConfigurationSettings.Ciclo1Dias).Except<Contacto>(contactosSeisMeses);

问题是第二个查询返回了第一个的项目,它不应该

最佳答案

Linq 的 Except 通过对象的 Equals() 比较对象。您需要覆盖 ContactoEqualsGetHashCode

许多以前的问题解释了如何:

Except 也有一个接收 IEqualityComparer 的重载,如果您更愿意实现一个而不是覆盖函数

要指定比较器内联查看:

关于c# - LINQ 除了没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809967/

相关文章:

c# - Xbox编程

c# - 在 JavaScript 中使用 String.Format?

.NET Instrumentation - 调用自定义程序集失败 - COR PROFILER

c# - 将 Linq 查询表达式转换为点符号

c# - 为什么没有M后缀的c#小数不能初始化?

c# - WPF 使用计时器重复一个 Action

.net - Msvcr71.dll Msvcp71.dll 丢失

asp.net - 在 ASP.net 中读取 Azure AD 登录用户详细信息

asp.net - VB.Net IIf函数中添加SqlParameter

asp.net - ASP.NET Core (ASP.NET 5) 应用程序中有哪些可用框架?