在c#中使用Linq内部查询创建列表

本文关键字:内部 查询 创建 列表 Linq | 更新日期: 2023-09-27 18:07:17

我正在尝试使用Linq创建子列表,但不理解其中的错误。我不认为我做错了,但我想别人的眼光会帮助我解决这个问题。

var dataList = File.ReadAllLines(inputFile);
 dataList = from line in dataList
              let temp = from data in line.Split(';').ToList()
                         where line.Split(';').ToList().IndexOf(data) != 0 ||line.Split(';').ToList().IndexOf(data) != 1
                          select data
                          select string.Join(",",temp);

我得到错误说IEnumerable列表不能隐式转换为字符串[]..:(

在c#中使用Linq内部查询创建列表

dataList是一个数组,而LINQ返回IEnumerable<string>。在查询语句后面添加ToArray:

dataList = (from line in dataList
            let temp = from data in line.Split(';').ToList()
                        where line.Split(';').ToList().IndexOf(data) != 0 || line.Split(';').ToList().IndexOf(data) != 1
                        select data
            select string.Join(",", temp)).ToArray();

当我试图编译你发布的代码时,我得到以下异常:

不能隐式转换类型"System.Collections.Generic。IEnumerable' to 'string[]'。一个存在显式转换(您是否缺少强制类型转换?)

原因是您试图重用dataList,但返回类型的File。ReadAllLines和字符串。连接方法不匹配。

dataList = (from line in dataList
                   let temp = from data in line.Split(';').ToList()
                              where line.Split(';').ToList().IndexOf(data) != 0 || line.Split(';').ToList().IndexOf(data) != 1
                              select data
                   select string.Join(",", temp)).ToArray();

欢呼,

你使用的是哪个版本的。net Framework ?String.Join接受IEnumerable<string>的过载只是在v4.0中引入的。如果你使用的是较早的版本,它会试图将IEnumerable<string>作为string[]使用。

也(这不能解决你的问题)我认为||在第4行应该是一个&&