I have to work with multiple SQL Server tables that generally look like this:
int id_this, int id_that, ..., double Value1, double Value2, ..., double Value96
I know this sucks, but I can’t change it. What I want to do now is to define some class like
public class Foo
{
public int Id_This { get; set; }
public int Id_That { get; set; }
...
public double Value[];
}
The Value-Array being a property of course, but I think you get the idea.
The question is, how to get the 96 columns into the array as painlessly as possible.
I could do that with a plain SqlDataReader, since DataRow allows indexed access, but I wonder if I could declare some attributes or write some minimum amount of code to use the class directly with LINQ2SQL.
As a minimum, I would like to do
dataContext.ExecuteQuery<Foo>("SELECT * FROM Foo");
Ooh, that is… nice? The
DataContextmethods always expect an entity type; there is noExecuteReader, which is a pain (but understandable, as it wants to behave as an ORM). To be honest, I would be tempted to use ADO.NET for the guts against this table, but if you have mapped the wide table to theDataContextyou should be able to use either regular C# or reflection.Since the number doesn’t change, unless you have multiple tables I’d just bite the bullet and write some ugly code:
If you have multiple tables… reflection, perhaps optimised via
Expression: