2012年8月24日 星期五

LINQ查詢語法

select left join 回傳某個物件並依據關聯物件來設定某些屬性值
====
(from a in newlist
join b in db基本.產品資料檢視 on a.產品序號 equals b.產品編號 into b1
from b in b1.DefaultIfEmpty()
select new { a, b }).Select(a =>
                          {
                              a.a.產品名稱 = a.b == null ? a.a.產品名稱 : a.b.產品名稱;
                              return a.a;
                          })
※因為是left join,要使用關聯物件的屬性前需要先判斷物件是否為null 避免nullexception

equals 多個屬性
====
寫法有兩種,第一種寫法若有錯誤則必須改用第二種(原因不明)
 1. new { 本次盤點.產品編號, 本次盤點.盤點單.倉庫 } equals new { 期初盤點.產品編號, 期初盤點.盤點單.倉庫 }
 2. new { a=本次盤點.產品編號, b=本次盤點.盤點單.倉庫 } equals new { a=期初盤點.產品編號, b=期初盤點.盤點單.倉庫 }

group by  多個屬性
====
.GroupBy(a => new { a.銷貨資料.客戶編號, a.產品編號 })

order by 多個屬性
====
.OrderBy(a =>a.客戶編號).ThenBy(a=>a.產品編碼).ThenBy(a=>a.產品序號)

List
====
.Exists(p => ...) // 判斷是否存在特定物件
.Find(p => ...) // 尋找第一個特定物件

IEnumerable<T>
====
.Where(row => ...) // 尋找符合某些條件的row
(from a in 採購單明細Model.取得採購單明細列表(門市代號,採購單號) select a.交貨日期).Distinct() // 找出某個屬性不重複的資料並取出屬性值
.GroupBy(a => a.姓名).Select(a => a.First()) // 找出某個屬性不重複的資料並取出相同群組中第一個物件

從 IEnumerable 轉為 IEnumerable<T> 以便使用 .Where()
====
.Cast(<T>).Where(...)

沒有留言:

input 連結 datalist 用程式控制彈出選項

範例: nextTick(() => document.querySelector('input').showPicker());  ※僅支援現代瀏覽器