2017-12-22 6 views
0

ILambda Aggregate Expression C#

folgende Objektmodell haben
class ObjectModel 
{ 
    int id; 
    string Name; 
} 

Ich brauche die Namen aus der Liste der ObjectModel

ich diese Lambda-Ausdruck verwendet haben verketten:

List<ObjectModel> objList = some method which returns the list 
objList.Aggregate((a, b) => a.Name + " " + b.Name); 

aber ich bin Fehler bekommen

Kann mit Aggregat nur Lambda verwenden müssen konvertieren

var accum = string.Join(" ", objList.Select(o => o.Name)); 

oder bleiben wie so nicht implizit String ObjectModel

I Ausdruck

Antwort

1

Sie verwenden können:

var acc2 = objList.Aggregate("", (acc,item) => acc += " " + item).Trim(); 

Der Grund, warum Sie Eine Konvertierungsausnahme erhalten Sie, wenn Ihre Version eine Ausgabe von ObjectModel benötigt.

Sie verwenden diese Überlastung:

public static TSource Aggregate<TSource>(
    this IEnumerable<TSource> source, 
    Func<TSource, TSource, TSource> func 
) 

https://msdn.microsoft.com/en-us/library/bb548651(v=vs.110).aspx

Ich bin mit

public static TAccumulate Aggregate<TSource, TAccumulate>(
    this IEnumerable<TSource> source, 
    TAccumulate seed,        // "" 
    Func<TAccumulate, TSource, TAccumulate> func  // (acc,item) => string 
) 

https://msdn.microsoft.com/en-us/library/bb549218(v=vs.110).aspx

Sie kehren den gleichen Typ wie die IEnumeration hat, ich bin frei zurückzukehren unabhängig von der Art mein 2. Func tut

1

wie diese versuchen;

var names = objList.Select(x => x.Name).Aggregate((a, b) => a + " " + b); 

Aggregate erwartet Art von ObjectModel Ausdruck, sollten Sie select String Name Variable zuerst.