I decided to try out LINQ for the first time to try and solve this question.
The results of my first foray into the wonderful world of LINQ looked like this:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>()
{
"fred-064528-NEEDED1",
"xxxx",
"frederic-84728957-NEEDED2",
"sam-028-NEEDED3",
"-----",
"another-test"
};
var result =
from s in list
where (from c in s where c == '-' select c).Count() == 2
select s.Substring(s.LastIndexOf("-") + 1);
foreach (string s in result)
Console.WriteLine(s);
Console.WriteLine("Press Enter");
Console.ReadLine();
}
}
}
I'd like to know how I can improve the above solution to this contrived little example. I'm not too interested in whether I've used the best validation method, or how I could localise "Press Enter" or anything like that; I'm just interested in using this example to learn a little more about LINQ.
var result =
from s in list
where s.Count(x => x == '=') == 2
select s.Substring(s.LastIndexOf("-") + 1);
It can also be written using Lambda expressions:
var result =
list.Where(s => (from c in s where c == '-' select c).Count() == 2).Select(
s => s.Substring(s.LastIndexOf("-") + 1));
I prefer Lambda expressions over LINQ syntax because of the Fluent interface. IMHO it is more human readable.
I don't think this is an improvement, as it is less readable, but you can do it all in one-line using some of the inbuilt methods in the List class:
list.FindAll(s => s.ToCharArray().
Where(c => c == '-').Count() ==2).
ForEach(c => Console.WriteLine(c.Substring(c.LastIndexOf("-") + 1)));
Personally I find this rather horrible, so it's just for interest!
This is pretty nice I think. Partly LINQ.
var result = String.Join("-", inputData.Split('-').Skip(2));
If there can't be any '-' after the first two then this will do (not LINQ):
var result = inputData.Split('-')[2]; //If the last part is NEE-DED then only NEE is returned. And will fail on wrong input
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With