FairDinkum82
FairDinkum82

Reputation: 177

making a list using inner query in Linq in C#

I am trying to create a sublist using Linq but don't understand the error in this. I don't think i am doing wrong but i think others eye will help me to sort this issue.

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);

I am getting error saying that IEnumerable list cannot be implicitly converted to string[]..:(

Upvotes: 0

Views: 451

Answers (3)

Martin
Martin

Reputation: 5452

What version of the .NET Framework are you on? The overload of String.Join that takes an IEnumerable<string> was only introduced in v4.0. If you're on an earlier version it's trying to take that IEnumerable<string> and use it as a string[].

Also (this doesn't fix your problem) I think the || in the 4th line should be a &&.

Upvotes: 0

wacdany
wacdany

Reputation: 1001

When I tried to compile that code you posted I get the following exception:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable' to 'string[]'. An explicit conversion exists (are you missing a cast?)

Reason is that you are trying to reuse dataList, but the return types of File.ReadAllLines and string.Join methods don't match. This fixes it:

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();

Cheers,

Upvotes: 1

Andrei
Andrei

Reputation: 56688

dataList is an array, while LINQ returns IEnumerable<string>. Add ToArray to the end of the query:

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();

Upvotes: 4

Related Questions