<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bee Eee Blog &#187; linq</title>
	<atom:link href="http://blog.bee-eee.com/category/linq/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bee-eee.com</link>
	<description>-- C# hints and tips</description>
	<lastBuildDate>Wed, 23 Dec 2009 19:00:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>c# Getting a nullable attribute to serialize to xml</title>
		<link>http://blog.bee-eee.com/2009/07/23/c-getting-a-nullable-attribute-to-serialize-to-xml/</link>
		<comments>http://blog.bee-eee.com/2009/07/23/c-getting-a-nullable-attribute-to-serialize-to-xml/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 15:55:12 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[c# coding GUI]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[linq]]></category>

		<guid isPermaLink="false">http://blog.bee-eee.com/?p=76</guid>
		<description><![CDATA[It isn&#8217;t straight forward to get a nullable field to serialize. Technically it isn&#8217;t supported. But I just discovered a way today. You see null strings are supported. The idea is to ignore the real nullable property while substituting the string version as follows: [XmlRoot("Comment")] public class Comment { [XmlIgnore] public DateTime? CommentTime { get; [...]]]></description>
			<content:encoded><![CDATA[<p>It isn&#8217;t straight forward to get a nullable field to serialize.  Technically it isn&#8217;t supported.  But I just discovered a way today.  You see null strings are supported.  The idea is to ignore the real nullable property while substituting the string version as follows:</p>
<pre class="code">
    [XmlRoot("Comment")]
    public class Comment
    {
        [XmlIgnore]
        public DateTime? CommentTime { get; set; }

        [XmlAttribute("CommentTime")]
        public string CommentTimeStr
        {
            get
            {
                return (CommentTime.HasValue) ? CommentTime.Value.ToString() : null;
            }

            set
            {
                if (string.IsNullOrEmpty(value))
                    CommentTime = null;
                else
                    CommentTime = DateTime.Parse(value);
            }
        }
  }
</pre>
<p>Now it can be serialized.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bee-eee.com/2009/07/23/c-getting-a-nullable-attribute-to-serialize-to-xml/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>c# logging linq to sql</title>
		<link>http://blog.bee-eee.com/2009/01/01/c-logging-linq-to-sql/</link>
		<comments>http://blog.bee-eee.com/2009/01/01/c-logging-linq-to-sql/#comments</comments>
		<pubDate>Thu, 01 Jan 2009 19:04:33 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[mmsql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.bee-eee.com/?p=62</guid>
		<description><![CDATA[I&#8217;ve often been frustrated by the sql that linq produces.  Usually it&#8217;s really good, but occasionally it produced monstrosities.   The hard part is getting at the sql that&#8217;s produced by a function.  Hovering over the statement in the idea is a real pain so instead I created the following class that dumps the sql to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve often been frustrated by the sql that linq produces.  Usually it&#8217;s really good, but occasionally it produced monstrosities.   The hard part is getting at the sql that&#8217;s produced by a function.  Hovering over the statement in the idea is a real pain so instead I created the following class that dumps the sql to a file</p>
<pre class="code">
public class DCLogger : IDisposable
    {
        private StringWriter writer;

        public DCLogger(System.Data.Linq.DataContext dc)
        {
            writer = new StringWriter();
            dc.Log = writer;
        }

        #region IDisposable Members

        public void Dispose()
        {
            writer.Flush();
            System.IO.File.WriteAllText( "c:\\temp\\sql.log", writer.ToString() );
        }

        #endregion
    }
</pre>
<p>To use it just create it passing it you data context.  The results are written to the file when it&#8217;s disposed.  </p>
<pre class="code">
  using( DCLogger( dc ) )
  {
    // ... some linq statement that executes
  }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.bee-eee.com/2009/01/01/c-logging-linq-to-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# linq to sql string comparisons</title>
		<link>http://blog.bee-eee.com/2008/10/27/c-linq-to-sql-string-comparisons/</link>
		<comments>http://blog.bee-eee.com/2008/10/27/c-linq-to-sql-string-comparisons/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 20:21:02 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://blog.bee-eee.com/?p=48</guid>
		<description><![CDATA[There are four different string comparisons for handling string fields with linq to sql.  They are as follows: The exact macth DataContext dc = new DataContext(...) var results = from row in dc.table where row.string_column == "Exact Match" select row; Begins With: DataContext dc = new DataContext(...) var results = from row in dc.table where [...]]]></description>
			<content:encoded><![CDATA[<p>There are four different string comparisons for handling string fields with linq to sql.  They are as follows:</p>
<p><strong>The exact macth</strong></p>
<pre class="code">DataContext dc = new DataContext(...)
var results =
  from row in dc.table
  where row.string_column == "Exact Match"
  select row;</pre>
<p><strong>Begins With:</strong></p>
<pre class="code">DataContext dc = new DataContext(...)
var results =
  from row in dc.table
  where row.string_column.StartsWith("Ex")
  select row;</pre>
<p>produces an sql match string &#8220;Ex%&#8221;</p>
<p><strong>Contains</strong></p>
<pre class="code">DataContext dc = new DataContext(...)
var results =
  from row in dc.table
  where row.string_column.Contains("Ex")
  select row;</pre>
<p>Which is equivalent to &#8220;%Ex%&#8221;</p>
<p><strong>Ends With</strong></p>
<pre class="code">DataContext dc = new DataContext(...)
var results =
  from row in dc.table
  where row.string_column.EndsWith("Ex")
  select row;</pre>
<p>Which is equivalent to &#8220;%Ex&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bee-eee.com/2008/10/27/c-linq-to-sql-string-comparisons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>c# dynamically picking the search direction with linq</title>
		<link>http://blog.bee-eee.com/2008/09/30/c-dynamically-picking-the-search-direction-with-linq/</link>
		<comments>http://blog.bee-eee.com/2008/09/30/c-dynamically-picking-the-search-direction-with-linq/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 20:31:10 +0000</pubDate>
		<dc:creator>brian</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[linq]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://blog.bee-eee.com/2008/09/30/c-dynamically-picking-the-search-direction-with-linq/</guid>
		<description><![CDATA[I&#8217;ve recently been writing an application that builds a linq to sql query dynamically.  For instance: MyDataContext dc() = new MyDataContext; var query = dc.MyTables; query = query.Where( t=&#62;t.id &#62; 10); and so I want to order it by a certain column: query = query.OrderBy( t=&#62;t.id ) but the problem is the order direction isn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been writing an application that builds a linq to sql query dynamically.  For instance:</p>
<pre class="code">
MyDataContext dc() = new MyDataContext;
var query = dc.MyTables;
query = query.Where( t=&gt;t.id &gt; 10);</pre>
<p>and so I want to order it by a certain column:</p>
<pre class="code">
query = query.OrderBy( t=&gt;t.id )</pre>
<p>but the problem is the order direction isn&#8217;t know before hand so at first I was stuck with the following:</p>
<pre class="code">
if ( descending )
    query = query.OrderByDescending( t=&gt;t.id);
else
    query = query.OrderBy(t=&gt;t.id);</pre>
<p>Now if there is only a few possible columns to sort against it isn&#8217;t too bad.  But when you have 10 different possible columns it really makes a lot of extra work just to control to sort direction.  So I made a little helper class that allows the following.  It works with linq and linq to sql:</p>
<pre class="code">
query = query.OrderByAscDec( t=&gt;t.id, descending );</pre>
<p>here&#8217;s the static class that implments the OrderByAscDec function:</p>
<pre class="code">
static class VPLinqExtensions
{
	public static IOrderedQueryable&lt;TSource&gt; OrderByAscDes&lt;TSource, TKey&gt;(
		this IQueryable&lt;TSource&gt; source,
		System.Linq.Expressions.Expression&lt;Func&lt;TSource,
		TKey&gt;&gt; keySelector, bool IsDescending)
	{
		if (IsDescending)
			return source.OrderByDescending(keySelector);
		else
			return source.OrderBy(keySelector);
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.bee-eee.com/2008/09/30/c-dynamically-picking-the-search-direction-with-linq/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
