<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' version='2.0'><channel><atom:id>tag:blogger.com,1999:blog-84663188938303418</atom:id><lastBuildDate>Thu, 12 Nov 2009 07:51:19 +0000</lastBuildDate><title>Sledges .NET blogg</title><description>.NET, MVC, C#, SQL, Java, Ajax.</description><link>http://www.sledge.se/index.htm</link><managingEditor>noreply@blogger.com (Sledge)</managingEditor><generator>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-84663188938303418.post-6290624380362402640</guid><pubDate>Wed, 11 Nov 2009 23:01:00 +0000</pubDate><atom:updated>2009-11-12T00:15:13.221+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>sql</category><category domain='http://www.blogger.com/atom/ns#'>data type precedence</category><title>Coalesce #2</title><description>Och på tal om coalesce.&lt;br /&gt;&lt;br /&gt;Av en slump märkte jag detta i SQL idag, som åtminstone inte jag visste.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="sql"&gt;SELECT start = COALESCE(dtStart, '') FROM MyTable&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I de fall dtStart var null så returnerades '1900-01-01 00:00:00'. Jag blev nyfiken på varför, och slog upp MSDN som förklarade returvärdet på följande sätt.&lt;br /&gt;&lt;br /&gt;"Returns the data type of expression with the highest data type precedence. If all expressions are nonnullable, the result is typed as nonnullable."&lt;br /&gt;&lt;br /&gt;Datatyperna konverteras alltså enligt en lista med inbördes ordning, och resultatet är beroende på vilken typ som står högst på listan. En VIP-lista för datatyper, kan man säga.&lt;br /&gt;&lt;br /&gt;Mer info &lt;a href="http://msdn.microsoft.com/en-us/library/ms190309.aspx"&gt;hittar du här&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/84663188938303418-6290624380362402640?l=www.sledge.se%2Findex.htm'/&gt;&lt;/div&gt;</description><link>http://www.sledge.se/2009/11/och-pa-tal-om-coalesce.html</link><author>noreply@blogger.com (Sledge)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-84663188938303418.post-6915638147338626870</guid><pubDate>Wed, 11 Nov 2009 22:10:00 +0000</pubDate><atom:updated>2009-11-12T08:51:19.146+01:00</atom:updated><category domain='http://www.blogger.com/atom/ns#'>coalesce</category><category domain='http://www.blogger.com/atom/ns#'>c#</category><title>Coalesce</title><description>Ofta kommer jag på mig själv med att skriva långa och inte särskilt vackra if-satser till funktioner som kan returnera null. Det kan t.ex. vara:&lt;br /&gt;&lt;br /&gt;&lt;pre class="c#" name="code"&gt;DateTime start = ScheduleHelper.GetPeriodById(id) != null ? ScheduleHelper.GetPeriodById(id).Start : DateTime.Min;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jag var inspirerad av SQL:s COALESCE-funktion, och eftersökte något liknande när min före detta kollega ledde mig in på följande spår.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c#" name="code"&gt;public static T Coalesce&amp;lt;t&amp;gt;(params Func&amp;lt;t&amp;gt;[] p) {&lt;br /&gt;    foreach (var func in p) {&lt;br /&gt;        try {&lt;br /&gt;            T r = func();&lt;br /&gt;            if (r == null) continue;&lt;br /&gt;            if ((typeof(T) == typeof(string))) {&lt;br /&gt;                if (!string.IsNullOrEmpty(r.ToString()))&lt;br /&gt;                    return r;&lt;br /&gt;            }&lt;br /&gt;            else if (!r.Equals(default(T))) {&lt;br /&gt;                return r;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        catch {&lt;br /&gt;            continue;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return default(T);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Med denna funktion skapar man alltså en hierarkisk ordning av önskade returvärden, t.ex.&lt;br /&gt;&lt;br /&gt;&lt;pre class="c#" name="code"&gt;DateTime start = Coalesce(&lt;br /&gt;      () =&amp;gt; ScheduleHelper.GetPeriodById(id).Start,&lt;br /&gt;      () =&amp;gt; ScheduleHelper.GetPeriodByDay(day).Start);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Skulle då GetPeriodById().Start returnera null (eller inte vara instansierat), försöker man med GetPeriodByDay().Start och slutligen returneras defaultvärdet för typen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/84663188938303418-6915638147338626870?l=www.sledge.se%2Findex.htm'/&gt;&lt;/div&gt;</description><link>http://www.sledge.se/2009/11/ofta-kommer-jag-pa-mig-sjalv-med-att.html</link><author>noreply@blogger.com (Sledge)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item><item><guid isPermaLink='false'>tag:blogger.com,1999:blog-84663188938303418.post-4074029165173714983</guid><pubDate>Wed, 11 Nov 2009 21:23:00 +0000</pubDate><atom:updated>2009-11-12T00:15:13.224+01:00</atom:updated><title>Välkommen!</title><description>Hej och välkommen till min .NET-blogg!&lt;br /&gt;&lt;br /&gt;Här samlar jag lite information, mest för att jag själv ska slippa undra "hur löste jag det där, jag vet att jag gjort det, men i vilket sammanhang?"&lt;br /&gt;&lt;br /&gt;För det mesta kommer det att handla om .NET, C# och SQL som är min vardag, men ibland kan även vissa lösningar på hårdvaru- och serverrelaterade problem få sin beskärda del i rampljuset.&lt;br /&gt;&lt;br /&gt;Nog pratat, direkt till en användbar snutt kod! :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/84663188938303418-4074029165173714983?l=www.sledge.se%2Findex.htm'/&gt;&lt;/div&gt;</description><link>http://www.sledge.se/2009/11/hej-och-valkommen-till-min.html</link><author>noreply@blogger.com (Sledge)</author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></item></channel></rss>
