顯示具有 LINQ 標籤的文章。 顯示所有文章
顯示具有 LINQ 標籤的文章。 顯示所有文章

2021年5月31日 星期一

[LINQ] C# datatable query (CopyToDataTable)

 使用linQ的CopyToDataTable時,無資料會產生「來源未包含 DataRow」的錯誤。

上網查了下有很多方式可以用,有的用Any()判斷有資料再進行CopyToDataTable,

但不知為何我Any()叫不出來,只好改將dtEmp 當CopyToDataTable的參數傳入,避免無資料時CopyToDataTable產生「來源未包含 DataRow」的錯誤。

下方為程式碼,可以參考看看。


                    DataTable dtEmp = new DataTable();


                    //將 dtEmp 當CopyToDataTable的參數傳入,避免無資料時CopyToDataTable產生「來源未包含 DataRow」的錯誤

                    (from e in dt_hr_employee.AsEnumerable()

                     where e.Field<string>("ID") == ID

                     select e).CopyToDataTable(dtEmp, LoadOption.PreserveChanges);


                    if (dtEmp.Rows.Count > 0)

                    {

                        Session.Add("ID", dtEmp.Rows[0]["ID"]);

                        Session.Add("department", dtEmp.Rows[0]["部門"]);

                        Session.Add("Cname", dtEmp.Rows[0]["中文名"]);

                        Session.Add("Ename", dtEmp.Rows[0]["英文名"]);

                    }

                    else {

                        // 無此人

                        lblErrMsg.Text = "User Server NG";

                    }

2020年7月30日 星期四

2019年4月2日 星期二

[LINQ] 判斷集合是否為空

在一般狀況下,我會用Count()是否為零來判斷
但假如有使用yield的話,效能似乎有點問題

所以找到了這個方法
Any()

2019年4月1日 星期一

[LINQ] OrderBy / ThenBy (Desc)

LINQ排序我覺得還挺直覺的,
使用LINQ Query Expression時寫法跟SQL查詢語法並沒有太大的出入,
只是在使用Lambda時要先選好要用的排序方式就是了!
(但我還是常常忘記要先選好XD)

2019年3月14日 星期四

[LINQ] UNION(聯集)/ INTERSECT(交集)/ EXCEPT(差集)

今天突然要用到 UNION 的語法,順便來記錄一下 INTERSECT、EXCEPT
使用 UNION 時它會排除重複資訊,這點跟 CONCAT 很不一樣,
所以我比較常用 UNION 。

至於聯集、交集跟差集我該解釋他們是什麼嗎?
恩...我在下面註記了下,希望有點幫助 XDDDD

2018年10月16日 星期二

[LINQ] LEFT JOIN / GROUP JOIN

GroupJoin 可以得到與Left Join相似的結果,接下來只要使用 Select過濾GroupJoin 中的內容就可以得到想要的結果。
(使用DefaultIfEmpty 因匿名型別無法輸出NULL(無法轉換成強型別),需特別注意Null的處理)


例:

Dim Query = _

            From oe In dt1.AsEnumerable _

            Group Join i In dt2.AsEnumerable _

            On oe.Field(Of String)("employeeid") Equals i.Field(Of String)("employeeid") Into Group _

            From p In Group.DefaultIfEmpty() _


            Select 部門 = oe.Field(Of Int32)("Dep"), _

                   員工 = oe.Field(Of String)("employeeid"), _

                   早餐 = If(p Is Nothing, "", p.Field(Of String)("早餐")), _

                   午餐 = If(p Is Nothing, "", p.Field(Of String)("午餐")), _

                   晚餐 = If(p Is Nothing, "", p.Field(Of String)("晚餐"))


//array1 LEFT JOIN array2
var q = array1
            .Join(array2,
                     a1 => ID,
                     a2 => a2.id,
                     (a1, a2) => new{
                                         A= a1.ID,
                                         B= a1.employee_id,
                                         a2
                                       })
            .Where(x => x.Date < DateTime.Now)
            .Select(x => x);

[Excel] 日期(數值)轉文字

Excel的日期格式真的常常使人抓狂, 在使用者輸入日期後該欄位真正的值會被Excel轉換成一串數字, 這串數字代表著自1900/1/1到該日期的總天數。 但程式或使用者真正要的,就不是這串數字, 他們就是要日期!要日期!! So, 為了取得真正的值只好使用TEXT函數來解決了 ...