簡體   English   中英

C#將列表作為逗號分隔的字符串存儲在字符串類型變量中,該字符串類型變量具有列表中項目的出現次數

[英]C# Store A List As a Comma Separated String In String Type Variable With Number Of Occurrence Of Items In The List

我有一個列表List<Book> booksList類型的Book

public class Book
{
public int ID {get; set;}
public string Name {get; set;}
public DateTime date {get; set;}

}

假設我們在此列表中有8本書,其名稱分別為book1, book2, book1, book4,book2, book4, book3, book4 如您所見,列表中有許多相同的書名,但ID不同。 我想將相似的書名與該書名出現次數的乘積存儲在列表中的字符串變量中,該變量稱為string BooksName作為逗號分隔的字符串,所以當我檢索BooksName我將有一個這樣的逗號分隔的字符串值

"2 X book1 , 2 X book2 , 1 X book3 , 3 X book4"

因為我在列表中有book1的2,book2的2,book3的1和book4的3。

我嘗試了以下linq,但是沒有用

string BooksName = booksList.GroupBy(r =>r.Name).Select(s => s.Select(e =>e.Name).Count() + " X " + s.Name).ToString();

之后,我該怎么做?

提前謝謝專業人員

您只需要訂購GroupBy的結果,修改您要選擇的書籍名稱進行顯示的方式,然后使用string.Join()

void Main()
{
    var booksList = new List<Book>();
    booksList.Add(new Book { Name = "book1" });
    booksList.Add(new Book { Name = "book2" });
    booksList.Add(new Book { Name = "book1" });
    booksList.Add(new Book { Name = "book4" });
    booksList.Add(new Book { Name = "book2" });
    booksList.Add(new Book { Name = "book4" });
    booksList.Add(new Book { Name = "book3" });
    booksList.Add(new Book { Name = "book4" });

    string BooksName = string.Join(", ", booksList
        .GroupBy(r =>r.Name)
        .OrderBy(r => r.First().Name)
        .Select(s => s.Count() + " X " + s.First().Name));

    Console.WriteLine(BooksName);
    // Output: 2 X book1, 2 X book2, 1 X book3, 3 X book4
}

public class Book
{
    public int ID { get; set; }
    public string Name { get; set; }
    public DateTime date { get; set; }
}

您不僅可以將.ToString枚舉,還需要使用string.Join代替:

var booksList = "book1, book2, book1, book4,book2, book4, book3, book4".Split(',')
    .Select(x => new Book { Name = x.Trim() })
    .ToList();

var BooksName = string.Join(", ", booksList
    .GroupBy(x => x.Name)
    .OrderBy(g => g.Key)
    .Select(g => $"{g.Count()} X {g.Key}")
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM