3

I need to return an IEnumerable. Here is the working code:

public IEnumerable<String> ReturnStudentsAsString(int vak, int klasgroep)
    {
        return (from s in Students
                orderby s.Naam, s.Voornaam
                select s.Naam);
    }

That works perfect! Now, I want to return the street and the postal code as well... So I created an anonymous type:

public IEnumerable<String> ReturnStudentsAsString(int vak, int klasgroep)
    {
        var test = (from s in Studenten
                orderby s.Naam, s.Voornaam
                select new 
                {
                    StudentNumber = s.StudentNumber,
                    Name = s.Name,
                    Street = s.Street,
                    PostalCode = s.PostalCode,
                    City = s.City
                });
        return test;

But it gives me an error... How could I fix it?

Thanks in advance!

0

3 Answers 3

3

Your method is returning an IEnumerable<string>. You've changed your return value to a new anonymous type, rather than a collection of strings.

To fix, you could:

  • create a class, and instantiate & return IEnumerable<MyClass> (preferred!)
  • return IEnumerable<dynamic> if you're using .NET 4. and you don't care for static typing up the call stack.
Sign up to request clarification or add additional context in comments.

Comments

1

It is no longer an IEnumerable<String>. You'd have to return an IEnumerable<object> to pass the anonymous type back from your query.

Edit: As others have suggested, a better approach would probably be to define a static type to hold the values you want to return. Alternately, since this is basically a one-liner query, you could do it in-line wherever you're using this method instead of creating a specialized method for it.

Comments

0

The error is because of your return type is stated as IEnumerable<String>. You are no longer returning an enumerable of string. You are trying to return an anonymous type, which is possible, but it is hacky. Instead, you should create a new type, maybe Address which contains all the members you need. You should also rename your method as it is no longer returning strings, but complex types with multiple members. You can also change your return type to be IEnumerable<dynamic> if you are on .NET 4, but I think creating the new type is still the better approach.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.