字符串列表中的简单 LINQ

Simple LINQ in string list

一个简单的 LINQ 请求的小问题。这是我第一次使用 LINQ,但仍然不了解所有机制。

我的结构是这样的

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\""};

每行数据由字段分隔符“;”构成每个字段都用引号 ".

封装

我有另一个 List Compose,其值必须在我的第一个列表中找到。我有我必须搜索的位置。因为“我需要的Texte”可以等于我正在搜索的值

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

我制作了第一个 Linq,只提取我感兴趣的 Line。

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

第一个请求效果很好,现在我只有数据线让我感兴趣。

我的问题是我不想要所有的行,而只想要在 FieldPositionInBaseDataToReturn 位置的值“Texte I need”的列表。

我必须制作另一个 LINQ,或者我可以修改我的第一个以直接获得我需要的东西吗?

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

由于您将多次使用每一行的拆分版本,因此将 Split 操作分开,然后处理结果数组:

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