2

I'm trying to return an IEnumerable<string> from a linq query and I'm getting the error: Cannot convert IEnumerable<AnonymousType> to IEnumerable<string>

I have no idea how to go about fixing this issue.

private IEnumerable<string> GetAllMembers(Type type)
        {    

            var query =
                (from member in type.GetMembers()
                 select new
                 {
                     Member = member.GetType() + " " + member.ToString()

                 }
                );

            return query;
        }
Marc Gravell
  • 1,026,079
  • 266
  • 2,566
  • 2,900
litterbugkid
  • 3,534
  • 7
  • 36
  • 54

4 Answers4

5

Try this

private IEnumerable<string> GetAllMembers(Type type)
    {    

        var query =
            from member in type.GetMembers()
             select member.GetType() + " " + member.ToString();

        return query;
    }

You were creating an IEnumerable of anonymous types, when I think you just wanted an enumeration of strings.

Justin Harvey
  • 14,446
  • 2
  • 27
  • 30
3

You are creating anonymous type with Member property. Simply return string values thus you are expect IEnumerable<string>

private IEnumerable<string> GetAllMembers(Type type)
{    
    return from member in type.GetMembers()
           select member.GetType() + " " + member.ToString();
}
Sergey Berezovskiy
  • 232,247
  • 41
  • 429
  • 459
2

You are returning an anonymous type (constructed by new {}) from your query and not a string. You can modify the query like this for example, so the result is an IEnumerable<string>:

return from member in type.GetMembers()
       select member.GetType() + " " + member.ToString();
Jan
  • 15,802
  • 5
  • 35
  • 59
2

The problem is your query returns an anonymous object with one property Members which is a string, simply change to just returning the string:

 var query =
            (from member in type.GetMembers()
             select member.GetType() + " " + member.ToString()
            );

  return query;
Jamiec
  • 133,658
  • 13
  • 134
  • 193