2016-06-05 25 views
-1

Ich habe zwei Sammlungen. Erstens ist ein komplexer Typ, der zwei String-Eigenschaften enthältUnterschied von einer Sammlung aus einer anderen Sammlung mit Linq

chpt_cd und appl_src_cd

public class ChapterCodeValidationOutput 
{ 
    public string chpt_cd { get; set; } 
    public string appl_src_cd { get; set; } 
} 

Und es ist in einer Variablen _validChapterCodeLst gespeichert bekommen.

Es ist Beispieldaten aussehen kann:

chpt_cd aapl_src_cd 
------- ----------- 

07038  C062 
06206  C191 

Der Eingang zu dem Verfahren, das die Sammlung erzeugt eine Auflistung von Zeichenfolgen ist.

List<string> _chapterCodes 

, die Daten wie enthalten:

'070038' 

möchte ich den Unterschied zwischen den beiden Sammlung zu finden und sie in zwei separaten Listen entsprechend setzen.

Je nachdem, was dort in dem _validChapterCodeLst ist sollte die gültige Ausgabeliste sein und es soll zwei Spalten ebenfalls

chpt_cd und die damit verbundenen appl_src_cd und die ungültige Liste soll den Unterschied zwischen _validChapterCodeLst und enthalten hat _chapterCodes Eingabeliste. Und sollte auch zwei Spalten enthalten.

Ich versuchte

gmvo._invalidChapterCodes = gmvi._chapterCodes.Except(_validChapterCodeLst.ConvertAll(x => x.chpt_cd.ToString())).ToList(); 

Ich versuchte _validChapterCodeLst zu konvertieren zuerst zur Liste und führen Sie dann Außer.

Aber das hat nicht funktioniert.

Auch ich weiß nicht, wie man die zugehörige appl_src_cd bekommt.

Ausgabe sollte

06206 C191

Antwort

2

Except akzeptiert nur Sammlungen von der gleichen Art sein. Sie können jedoch versuchen, diese (I HashSet hier für eine bessere Leistung verwendet):

var _chapterCodesHashSet = new HashSet<string>(_chapterCodes); 
var _invalidChapterCodes = _validChapterCodeLst.Where(item => !_chapterCodesHashSet.Contains(item.chpt_cd)).ToList(); 
+0

Für O (1) Suche Hashset ist immer viel besser als einfache Liste, O (n), guter Code –

+0

@ stop-cran Ok, aber neue HashSet (_validChapterCodeLst) wirft Ausnahme, wie soll man eine Sammlung von komplexen Objekttyp auf die Sammlung von Zeichenfolge zu werfen? – StrugglingCoder

+0

@StrugglingCoder, richtig. Bearbeitete Namen in der Antwort. –

1

I verwendet, in denen

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<ChapterCodeValidationOutput> _validChapterCodeLst = new List<ChapterCodeValidationOutput>() { 
       new ChapterCodeValidationOutput() { chpt_cd = "07038", appl_src_cd = "C062"}, 
       new ChapterCodeValidationOutput() { chpt_cd = "06206", appl_src_cd = "C191"} 
      }; 
      List<string> _chapterCodes = new List<string>() { "07038" }; 
      var results = _validChapterCodeLst.Where(x => !_chapterCodes.Contains(x.chpt_cd)).Select(y => new { chpt_cd = y.chpt_cd, appl_src_cd = y.appl_src_cd}).ToList(); 
     } 
    } 
    public class ChapterCodeValidationOutput 
    { 
     public string chpt_cd { get; set; } 
     public string appl_src_cd { get; set; } 
    } 
} 
Verwandte Themen