2017-05-05 4 views
1

私は最後の360日間、180日間および90日間に問い合わせを受けていない連絡先のリストを返します。LINQ期待どおりに動作しない以外

最後の361日に照会されなかった人物も、180日間と90日間のクエリによって返されます。

私は除きでそれを行うことができると思ったが、thatsのは確かに機能していない、

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; 
    } 

} 

そして、私のロジックを除き

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

は問題があります2番目のクエリは、私の最初の項目を返すとshould shouldnt

答えて

4

Linq's Exceptは、オブジェクトをEquals()で比較します。 ContactoEqualsGetHashCodeを上書きする必要があります。

多くの以前の質問はどのように説明します。

Exceptはまた、あなたが関数をオーバーライドするのではなく、1を実装することを好む場合IEqualityComparerをrecieves過負荷を持っている

比較インラインを指定する場合:

+0

任意の簡単な方法? –

+0

@ LuisValencia-MVP - 更新を参照してください –

関連する問題