繁体   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