Home > OS >  Simple LINQ in string list
Simple LINQ in string list

Time:03-31

A little question for a simple LINQ request. This is my first time with LINQ and still not understand all mechanism.

My structure is something like this

List<string> baseData = new List<string>{"\"10\";\"Texte I need\";\"Texte\"",
                                         "\"50\";\"Texte I need\";\"Texte\"",
                                         "\"1000\";\"Texte I need\";\"Texte\"",
                                         "\"100\";\"Texte I need\";\"Texte\""};

Each line of data is construct with field separator ";" and each field are encapsule with quote ".

I have another List Compose with value i have to find in my first list. And i have the Position in line i have to search. because "Texte I need" can be equal with value i am searching

List<string> valueINeedToFind = new List<string>{"50","100"};
char fieldSeparator = ';';
int fieldPositionInBaseDataForSearch = 0;
int fieldPositionInBaseDataToReturn = 1;

I made a first Linq to extract only Line interested me.

List<string> linesINeedInAllData = baseData.Where(Line => valueINeedToFind.Any(Line.Split(fieldSeparator)[fieldPositionInBaseDataForSearch].Trim('"').Contains)).ToList();

This first request Work Great and now i have only Data Line Interested me.

My problem is I don't want all the line But only a list of the value "Texte I need" in position FieldPositionInBaseDataToReturn.

I have to made another LINQ or can i modify my first to directly get what I need?

CodePudding user response:

List<string> linesINeedInAllData = baseData.Where(Line => valueINeedToFind.Any(Line.Split(fieldSeparator)[fieldPositionInBaseDataForSearch].Trim('"').Equals)).ToList()
.Select(Line => Line.Split(fieldSeparator)[fieldPositionInBaseDataToReturn].Trim('"').ToList();

CodePudding user response:

Since you will be using the split version of each line more than once, separate out the Split operation and then work on the resulting array:

List<string> linesINeedInAllData = baseData.Select(Line => Line.Split(fieldSeparator))
                                           .Where(splitLine => valueINeedToFind.Any(splitLine[fieldPositionInBaseDataForSearch].Trim('"').Contains))
                                           .Select(splitLine => splitLine[fieldPositionInBaseDataToReturn])
                                           .ToList();
  • Related