I have a WCF/REST web service that I’m considering using Linq to SQL to return database info from.
It’s easy enough to do basic queries against tables and return rows, for example:
[WebGet(UriTemplate = "")]
public List<User> GetUsers()
{
List<User> ret = new List<User>(); ;
using (MyDataContext context = new MyDataContext())
{
var userResults = from u in context.Users select u;
ret = userResults.ToList<User>();
}
return ret;
}
But what if I want to return data from multiple tables or that doesn’t exactly match the schema of the table? I can’t figure out how to return the results from this query, for example:
var userResults = from u in context.Users
select new { u.userID, u.userName, u.userType,
u.Person.personFirstname, u.Person.personLastname };
Obviously the resulting rowset doesn’t adhere to the “User” schema, so I can’t just convert to a list of User objects.
I tried making a new entity in my object model that related to the result set, but it doesn’t want to do the conversion.
What am I missing?
Edit: related question: what about results returned from stored procedures? Same issue, what’s the best way to package them up for returning via the service?
You can create a Complex Type and instead of returning Anonymous object you return the Complex Type. When you map stored procedures using function import, you have a option to automatically create a complex type.
Create a custom class with the properties that you need:
Then create it from your Linq query: