Rani Radcliff
Rani Radcliff

Reputation: 5084

Attempting to Use String.Join on a Collection does not list Items only Name of Collection

Everywhere I look seems to have the same response but I can't find one to address the issue I am having. I am trying to concatenate the items in a list of objects into a string. However, what I get is the name of the page and the name of the object, the actual list values.

I tried:

string combinedLog = string.Join(",", logList)

I also tried:

string combinedLog = string.Join(",", logList.Select(c => c.ToString()).ToArray<string>());

What I get is PageName + Log, PageName + Log

This is the object:

    private class Log
    {
        public DateTime LogTime { get; set; }
        public string Result { get; set; }
        public string ItemName { get; set; }
        public Guid? ItemId { get; set; }
        public string ErrorMessage { get; set; }
    }

and the list is:

List<Log> logList = new List<Log>();

I am trying to get a string like: "10/21/2019, Fail, Acme, Could not Import, 10/21/2019, Success, ABC, no errors"

Upvotes: 0

Views: 73

Answers (2)

Pavel Anikhouski
Pavel Anikhouski

Reputation: 23238

You can override ToString() method in Log class for that

private class Log
{
    public DateTime LogTime { get; set; }
    public string Result { get; set; }
    public string ItemName { get; set; }
    public Guid? ItemId { get; set; }
    public string ErrorMessage { get; set; }

    public override string ToString()
    {
         return $"{LogTime}, {Result}, {ItemName}, {ErrorMessage}";
    }
}

And than concatenate logList into one string using string.Join

Upvotes: 5

Igal23
Igal23

Reputation: 122

You should do something like String.Join(";", logList.Select(x => $"{x.LogTime},{x.Result},{x.ItemName}")) ..

Or use generics to get it

var fields = typeof(Log).GetFields();
var result = String.Join(";", logList.Select(x => 
                 String.Join(",", fields.Select(f => f.GetValue(x)))
             ));

Upvotes: 1

Related Questions