2016-03-21 3 views
0

Ich habe Code, wo ich zwei Klassen namens ClassA und ClassB habe und ich habe zwei fileds Klasse in Nummer und Status in den beiden Klassen, Ich habe eine zwei Liste namens listA und erstellt listB, Ich muss es so abfragen, dass nur die Status Eigenschaft von listB zu listA mit linq/lambda Ausdruck übertragen werden muss. Wie kann ich das tun ?? Vielen Dank im Voraus, Hier ist mein Code-SchnipselWie können wir Daten von einer Liste in eine andere übertragen

class ClassA 
{ 
    public int Number { get; set; } 
    public bool Status { get; set; } 
} 

class ClassB 
{ 
    public int Number { get; set; } 
    public bool Status { get; set; } 
} 


static void Main(string[] args) 
{ 
    List<ClassA> listA = new List<ClassA>(); 
    List<ClassB> listB = new List<ClassB>(); 
    ClassA a = new ClassA(); 
    a.Number = 1; a.Status = false; 
    ClassA a2 = new ClassA(); 
    a2.Number = 1; a2.Status = true; 
    ClassA a3 = new ClassA(); 
    a3.Number = 1; a3.Status = true; 
    ClassA a4 = new ClassA(); 
    a4.Number = 1; a4.Status = true; 

    ClassB b1 = new ClassB(); 
    b1.Number = 2;b1.Status = true; 
    ClassB b2 = new ClassB(); 
    b2.Number = 3; b2.Status = false; 
    ClassB b3 = new ClassB(); 
    b3.Number = 2; b3.Status = true; 
    ClassB b4 = new ClassB(); 
    b4.Number = 3; b4.Status = false; 
    listA.Add(a); 
    listA.Add(a2); 
    listA.Add(a3); 
    listA.Add(a4); 
    listB.Add(b1); 
    listB.Add(b2); 
    listB.Add(b3); 
    listB.Add(b4); 

} 

Antwort

2

ich Automapper verwenden würde die beiden Klassen zusammen in einem Aufruf zu kartieren. Diese Art von Situation ist, wofür es entworfen wurde. Sie müssen lediglich eine Zuordnungskonfiguration erstellen und dann die beiden Klassen zuordnen. Es ist ein sehr einfaches aber mächtiges Werkzeug. z.B. Etwas wie folgt aus:

var config = new MapperConfiguration(cfg => cfg.CreateMap<ClassA, ClassB>() 
); 

var mapper = config.CreateMapper(); 

List<ClassA> listA = new List<ClassA>(); 
var listClassB = mapper.Map<List<ClassB>>(listA); 
+0

Gut erkannt. Fest. –

0

Wenn Sie Linq verwenden, es ist ganz einfach:

var classb = from a in listA select new ClassB() { Status = a.Status }; 

Dies wird wieder ein IEnumerable<ClassB>, aber Sie können ToList benutzen, um Ihre Sammlung als List zu bekommen.

0

versuchen, diesen Code ein:

static void Main(string[] args) 
     { 

      List<ClassA> listA = new List<ClassA>(); 
      List<ClassB> listB = new List<ClassB>(); 
      ClassA a = new ClassA(); 
      a.Number = 1; a.Status = false; 
      ClassA a2 = new ClassA(); 
      a2.Number = 1; a2.Status = true; 
      ClassA a3 = new ClassA(); 
      a3.Number = 1; a3.Status = true; 
      ClassA a4 = new ClassA(); 
      a4.Number = 1; a4.Status = true; 

      ClassB b1 = new ClassB(); 
      b1.Number = 2;b1.Status = true; 
      ClassB b2 = new ClassB(); 
      b2.Number = 3; b2.Status = false; 
      ClassB b3 = new ClassB(); 
      b3.Number = 2; b3.Status = true; 
      ClassB b4 = new ClassB(); 
      b4.Number = 3; b4.Status = false; 
      listA.Add(a); 
      listA.Add(a2); 
      listA.Add(a3); 
      listA.Add(a4); 
      listB.Add(b1); 
      listB.Add(b2); 
      listB.Add(b3); 
      listB.Add(b4); 
      listA.AddRange(listB.Select(o => new ClassA() { Status = o.Status })); 
     } 
Verwandte Themen