I’m doing a bunch of database / XML stuff @ work, so I decided to use to
VS08 beta 2 so
I can use LINQ. For reasons I don’t want to get into, I needed a way to
convert arbitrary database rows, read using a SqlDataReader, into XML.
LINQ to SQL was out, since the code has to work against arbitrary tables
(i.e. I have no compile time schema knowledge). But XLinq LINQ to XML helped
me out a ton. Check out this example:
const string ns = "{http://some.sample.namespace.schema}";
while (dr.Read())
{
XElement rowXml = new XElement(ns + tableName,
from i in GetRange(0, dr.FieldCount)
select new XElement(ns + dr.GetName(i), dr.GetValue(i)));
}
That’s pretty cool. The only strange thing in there is the GetRange method. I needed an easy way to build a range of integers from zero to the number of fields in the data reader. I wasn’t sure of any standard way, so I wrote this little two line function:
IEnumerable<int> GetRange(int min, int max)
{
for (int i = min; i < max; i++)
yield return i;
}
It’s simple enough, but I found it strange that I couldn’t find a standard way to generate a range with a more elegant syntax. Ruby has standard range syntax that looks like (1..10), but I couldn’t find the equivalent C#. Did I miss something, or am I really on my own to write a GetRange function?
Update: As expected, I missed something. John Lewicki pointed me to the static Enumerable.Range method that does exactly what I needed.
4 Comments
Andres Aguiar · August 18, 2007
Alex James · August 18, 2007
John Lewicki · August 18, 2007
Anonymous · August 21, 2007