markpcasey
markpcasey

Reputation: 559

LINQ ForEach with Replace

I am trying to replace a string date value "01/01/1700" with an empty string in LINQ.

The date is of type string.

Something like this but I cant get it to work.

Query<Client>(sql).ToList().ForEach(x => x.DateOfBirth =
    x.DateOfBirth.Replace("01/01/1700", ""));

This code works but its not LINQ.

        var result = Query<Client>(sql).ToList();
        foreach (var client in result)
        {
            if (client.DateOfBirth == "01/01/1700")
            {
                client.DateOfBirth = "n/a";
            }
        }

Thanks for your help.

Upvotes: 0

Views: 5420

Answers (3)

Mare Infinitus
Mare Infinitus

Reputation: 8162

The problem is the ToList(). The result is not visible in the variable you use afterwards.

Try out the following:

var list = Query<Client>(sql).ToList();
list.ForEach(l => l.DateOfBirth = l.DateOfBirth.Replace("01/01/1700", "n/a"));

Should work fine. Use the list variable afterwards.

Upvotes: 5

Risky Martin
Risky Martin

Reputation: 2521

Your code assumes that changes made to an object in a List will be reflected in the Query<Client> that the object came from. Apparently this is not the case. One thing you could try is assigning the list before calling ForEach() and using the list from that point on:

var clients = Query<Client>(sql).ToList();
clients.ForEach(x => x.DateOfBirth = x.DateOfBirth.Replace("01/01/1700", ""));

Also, ForEach is not a LINQ operator. It is a method in the List class. Unlike LINQ operators, it will modify the list that called it and will not return anything. The way to "modify" data with LINQ is by using select:

var clients = (from client in Query<Client>(sql).ToList()
               select new Client(client) 
                      { 
                          DateOfBirth = client.DateOfBirth.Replace("01/01/1700", "")
                      }).ToList();

Upvotes: 0

markpcasey
markpcasey

Reputation: 559

        var result = Query<Client>(sql).ToList();
        result.ForEach(l => l.DateOfBirth = l.DateOfBirth.Replace("01/01/1700", "n/a"));

Upvotes: 1

Related Questions