2014年6月27日 星期五

LINQ 動態查詢 LINQKit PredicateBuilder + Glimpse 效能監測

早在 2013 LINQ 動態查詢 就困擾著我

http://weisnote.blogspot.tw/2013/03/dynamic-linq.html

當時找到 Dynamic LINQ

但是組字串並不是個好法子

(要組字串的話 我何不直接用 Pure T-SQL)





曾經與 LINQ 纏鬥過的朋友都知道 動態查詢 很難搞

尤其是 Or

並沒有什麼內建的法子 可以讓你動態來 Or Or Or

要不就寫死 .Where(x => x.Foo == 'Foo' || x.Bar == 'Bar || x.Goo == 'Goo' || x.Nar == 'Nar'')

要不就 Expression Trees 硬幹 像這樣

靠自己 好自在...才怪

賣鬧啊 Expression Trees 學習曲線 可沒比 Regular Expression 低 (雖然小弟兩樣都沒學好)





如今 2014 了 技術是會進步的!!

(其實應該出來滿久的 只是我沒去玩他)

拜讀於此:

援助教技--IT點滴日誌:http://neo-tech-tw.blogspot.tw/2013/08/linq-predicatebuilder.html

繼續沉睡5000年:http://leaflet-t-h.blogspot.tw/2011/11/linq-predicatebuilder.html

Kelp Code:http://kelp.phate.org/2011/12/linq-to-object-linqkitpredicatebuilder.html





鄭重歡迎 ~ LINQKit http://www.albahari.com/nutshell/linqkit.aspx





LINQKit 裡面應該是有不少妖魔鬼怪的 但是今天只來玩 PredicateBuilder 來搞定 Or Or Or

照官網範例 很簡單就 完成了

靠大神 好爽...正解





其中比較讓人困惑的 可能就是這句

var predicate = PredicateBuilder.False<Products>();

它的完整型別長這樣

Expression<Func<Products, bool>> predicate = PredicateBuilder.False<Products>();

更不懂了?? 其實他就下面這東東

Expression<Func<Products, bool>> predicate = x => false;

至於什麼時候用 PredicateBuilder.True<T> 什麼時候用 PredicateBuilder.False<T> 則是看接起來是什麼結果

簡單來說 如果都是 Or 用 PredicateBuilder.False<T> 如果都是 And 用 PredicateBuilder.True<T>





眼尖的考究帝一定有發現瀏覽器下面有一條鬼東西

那是最近神人傳授的好物 Glimpse

不僅美觀 功能更甚 MiniProfiler

Glimpse 官網http://getglimpse.com/Docs/

怎麼裝就不用講了 Nuget~催落去

真要說有什麼缺點的話 大概就是 螢幕太小很麻煩 因為 他內容很多 非常寬 : P

2014年6月22日 星期日

一秒看破 樞紐 查詢 SQL PIVOT UNPIVOT LINQ

什麼是樞紐?






......






DB

弄點假資料(手 KEY 就太傻太天真)

查出來這樣

但是 User 要這樣

硬幹吧 男孩 For~For~For~






多想兩分鐘,你可以不必自殺






官方有解 MS SQL 2005 + 都能玩

http://technet.microsoft.com/zh-tw/library/ms177410(v=sql.105).aspx

SELECT <非樞紐資料行>,

    [第一個樞紐資料行] AS <資料行名稱>,

    [第二個樞紐資料行] AS <資料行名稱>,

    ...

    [最後一個樞紐資料行] AS <資料行名稱>

FROM

    (<產生資料的 SELECT 查詢>)

    AS <來源查詢的別名>

PIVOT

(

    <彙總函式>(<要彙總的資料行>)

FOR

[<包含將變成資料行標頭之值的資料行>]

    IN ( [第一個樞紐資料行], [第二個樞紐資料行],

    ... [最後一個樞紐資料行])

) AS <樞紐分析表的別名>

<選擇性的 ORDER BY 子句>;






WTF...






看圖 (那堆 欄位沒法 直接用 SQL 搞 死心吧 只能靠 C# 組字串)

用 WITH 能略顯風騷???

沒了






等等...UNPIVOT 勒?






官網說 就是把 PIVOT 反過來






WTF...






有張反正規化的表

翻滾吧 Table

沒了






等等...LINQ 勒?






: P






http://abundantcode.com/how-to-create-pivot-data-using-linq-in-c/

http://linqlib.codeplex.com/wikipage?title=Pivot