字符串列表中的简单 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();
一个简单的 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();