it-swarm.com.de

Konzentrieren Sie alle Zeichenfolgen in einer Liste <Zeichenfolge> mit LINQ

Gibt es einen einfachen LINQ-Ausdruck, um meine gesamten List<string> Auflistungselemente zu einem einzigen string mit einem Trennzeichen zu verknüpfen?

Was ist, wenn die Auflistung benutzerdefinierte Objekte anstelle von string enthält? Stellen Sie sich vor, ich muss object.Name verketten.

497
Jobi Joy

Bei Verwendung von LINQ sollte dies funktionieren.

string delimiter = ",";
List<string> items = new List<string>() { "foo", "boo", "john", "doe" };
Console.WriteLine(items.Aggregate((i, j) => i + delimiter + j));

klassenbeschreibung:

public class Foo
{
    public string Boo { get; set; }
}

Verwendungszweck:

class Program
{
    static void Main(string[] args)
    {
        string delimiter = ",";
        List<Foo> items = new List<Foo>() { new Foo { Boo = "ABC" }, new Foo { Boo = "DEF" },
            new Foo { Boo = "GHI" }, new Foo { Boo = "JKL" } };

        Console.WriteLine(items.Aggregate((i, j) => new Foo{Boo = (i.Boo + delimiter + j.Boo)}).Boo);
        Console.ReadKey();

    }
}

Und hier ist mein Bestes :)

items.Select(i => i.Boo).Aggregate((i, j) => i + delimiter + j)
485
Ali Ersöz

In .NET 4.0 oder späteren Versionen:

String.Join(delimiter, list);

ist genügend.

881
Sedat Kapanoglu

Dies ist für ein String-Array:

string.Join(delimiter, array);

Dies ist für eine Liste <string>:

string.Join(delimiter, list.ToArray());

Und dies ist für eine Liste von benutzerdefinierten Objekten:

string.Join(delimiter, list.Select(i => i.Boo).ToArray());
112
using System.Linq;

public class Person
{
  string FirstName { get; set; }
  string LastName { get; set; }
}

List<Person> persons = new List<Person>();

string listOfPersons = string.Join(",", persons.Select(p => p.FirstName));
51
dev.bv

Gute Frage. Ich habe verwendet

List<string> myStrings = new List<string>{ "ours", "mine", "yours"};
string joinedString = string.Join(", ", myStrings.ToArray());

Es ist nicht LINQ, aber es funktioniert.

24
Jacob Proffitt
List<string> strings = new List<string>() { "ABC", "DEF", "GHI" };
string s = strings.Aggregate((a, b) => a + ',' + b);
8
Peter McG

Ich denke, wenn Sie die Logik in einer Erweiterungsmethode definieren, ist der Code viel besser lesbar:

public static class EnumerableExtensions { 
  public static string Join<T>(this IEnumerable<T> self, string separator) {  
    return String.Join(separator, self.Select(e => e.ToString()).ToArray()); 
  } 
} 

public class Person {  
  public string FirstName { get; set; }  
  public string LastName { get; set; }  
  public override string ToString() {
    return string.Format("{0} {1}", FirstName, LastName);
  }
}  

// ...

List<Person> people = new List<Person>();
// ...
string fullNames = people.Join(", ");
string lastNames = people.Select(p => p.LastName).Join(", ");
7
Jordão

Sie können einfach verwenden:

List<string> items = new List<string>() { "foo", "boo", "john", "doe" };

Console.WriteLine(string.Join(",", items));

Viel Spaß beim Codieren!

3
Nishanth Shaan

Ich habe das mit linq gemacht:

var oCSP = (from P in db.Products select new { P.ProductName });

string joinedString = string.Join(",", oCSP.Select(p => p.ProductName));
3
Biddut