Ich habe zwei Objekte nämlich Karte und Transaktion:Filter zwei Listen auf eine Eigenschaft C# Linq
Card:
public string CardID {get; set;}
public string TransactionRef {get; set;}
Transaction:
public string TxnID {get; set;}
public string TxnDetails {get; set;}
Hinweis: Die TransactionRef
ist das Format Date|TxnID
Ich habe auch eine Liste der zwei Objekte List<Card> cardDetails
und List<Transaction> transDetails
cardDetails:
{CardID = '1', TransactionRef = '20150824|Guid1'}
{CardID = '2', TransactionRef = '20150824|Guid2'}
{CardID = '3', TransactionRef = '20150824|Guid3'}
transDetails:
{TxnID = '23', TxnDetails = 'Guid1'}
{TxnID = '24', TxnDetails = 'Guid2'}
Ich möchte CardDetails mit TransDetails basierend auf TxnDetails filtern, so dass es die Elemente filtert, die die TxnDetails aus der 2. Liste nicht enthalten.
Dies sollte der Ausgang sein:
cardDetails:
{CardID = '3', TransactionRef = '20150824|Guid3'}
Ich habe wie diese mit Linq versucht:
cardDetails = cardDetails.Where(x => transDetails.Any(y => x.TransactionRef.Contains(y.TxnDetails) == false)).ToList();
aber es gibt immer die Liste als leer. Ich habe viele Varianten dieser Abfrage ohne Erfolg ausprobiert. Ich weiß, dass diese Frage vor und nach der Suche nach ihnen und dem Ausprobieren ihrer Lösungen gestellt wurde. Ich bin immer noch nicht in der Lage, es richtig zu machen.
Kann jemand vorschlagen, was mit meiner Frage falsch ist?
Hinweis: Eine Sache, die ich vergessen zu erwähnen, ist, dass diese Listen Tausende von Datensätzen enthalten können. Leistung ist also auch wichtig.
Diese Abfrage sollte alle Karten tatsächlich zurückkehrt, sind Sie sicher, dass es keine gibt? –
Ja, es gibt nichts zurück. Ich möchte nur den dritten Eintrag in den cardDetails zurückgeben, d. H. Die keine TxnDetails aus der zweiten Liste enthält. – nitinvertigo
Warum 'TxnDetails.ToString()' wenn 'TxnDetails' eine Zeichenfolge ist? –