<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-84663188938303418</id><updated>2009-11-12T08:51:19.137+01:00</updated><title type='text'>Sledges .NET blogg</title><subtitle type='html'>.NET, MVC, C#, SQL, Java, Ajax.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default'/><link rel='alternate' type='text/html' href='http://www.sledge.se/index.htm'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.sledge.se/atom.xml'/><author><name>Sledge</name><uri>http://www.blogger.com/profile/03557152713515872755</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-84663188938303418.post-6290624380362402640</id><published>2009-11-12T00:01:00.001+01:00</published><updated>2009-11-12T00:15:13.221+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='data type precedence'/><title type='text'>Coalesce #2</title><content type='html'>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;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/6290624380362402640/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=84663188938303418&amp;postID=6290624380362402640' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/6290624380362402640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/6290624380362402640'/><link rel='alternate' type='text/html' href='http://www.sledge.se/2009/11/och-pa-tal-om-coalesce.html' title='Coalesce #2'/><author><name>Sledge</name><uri>http://www.blogger.com/profile/03557152713515872755</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16030174053250640723'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-84663188938303418.post-6915638147338626870</id><published>2009-11-11T23:10:00.010+01:00</published><updated>2009-11-12T08:51:19.146+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='coalesce'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Coalesce</title><content type='html'>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;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/6915638147338626870/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=84663188938303418&amp;postID=6915638147338626870' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/6915638147338626870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/6915638147338626870'/><link rel='alternate' type='text/html' href='http://www.sledge.se/2009/11/ofta-kommer-jag-pa-mig-sjalv-med-att.html' title='Coalesce'/><author><name>Sledge</name><uri>http://www.blogger.com/profile/03557152713515872755</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16030174053250640723'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-84663188938303418.post-4074029165173714983</id><published>2009-11-11T22:23:00.001+01:00</published><updated>2009-11-12T00:15:13.224+01:00</updated><title type='text'>Välkommen!</title><content type='html'>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;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/4074029165173714983/comments/default' title='Kommentarer till inlägget'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=84663188938303418&amp;postID=4074029165173714983' title='0 kommentarer'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/4074029165173714983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/84663188938303418/posts/default/4074029165173714983'/><link rel='alternate' type='text/html' href='http://www.sledge.se/2009/11/hej-och-valkommen-till-min.html' title='Välkommen!'/><author><name>Sledge</name><uri>http://www.blogger.com/profile/03557152713515872755</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='16030174053250640723'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>
