Friday, April 28, 2017

[LINQ] Except

使用 LINQ Except 時發現到,為什麼都沒有作用,後來查 MSDN 才晃然大悟,自訂的 class 要指定 IEqualityComparer,Except 才知道要怎麼進行資料篩選,寫個簡易範例紀錄
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var demoData1 = new List<Employ>()
            {
                new Employ() { EmpNO = "0001" , EmpName = "張三"},
                new Employ() { EmpNO = "0002" , EmpName = "李四"},
                new Employ() { EmpNO = "0003" , EmpName = "王五"}
            };

            var demoData2 = new List<Employ>()
            {
                new Employ() { EmpNO = "0001" , EmpName = "張三"},
            };

            Console.WriteLine("沒有指定 IEqualityComparer 結果");
            var result1 = demoData1.Except(demoData2);
            ShowData(result1);

            Console.WriteLine("指定 IEqualityComparer 結果");
            var result2 = demoData1.Except(demoData2,new EmployComparer());
            ShowData(result2);
        }

        private static void ShowData( IEnumerable<Employ> datas)
        {
            foreach (var e in datas)
            {
                Console.WriteLine($"           {e.EmpNO}-{e.EmpName}");
            }
        }
    }

    class Employ
    {
        public string EmpNO { get; set; }
        public string EmpName { get; set; }
    }

    class EmployComparer : IEqualityComparer<Employ>
    {
        public bool Equals(Employ x, Employ y)
        {
            //Check whether the compared objects reference the same data.
            if (Object.ReferenceEquals(x, y)) return true;

            //Check whether any of the compared objects is null.
            if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                return false;

            //Check whether the products' properties are equal.
            return x.EmpNO == y.EmpNO && x.EmpName == y.EmpName;
        }

        public int GetHashCode(Employ e)
        {
            //Check whether the object is null
            if (Object.ReferenceEquals(e, null)) return 0;

            //Get hash code for the EmpNO field.
            int hashEmpNO = e.EmpNO == null ? 0 : e.EmpNO.GetHashCode();

            //Get hash code for the EmpName field.
            int hashEmpName = e.EmpName == null ?  0 : e.EmpName.GetHashCode();

            //Calculate the hash code for the product.
            return hashEmpNO ^ hashEmpName;
        }
    }
}
[LINQ] Except

Thursday, April 27, 2017

[VS] 工作清單優先順序

工作清單是 VS 內的好用功能之一,只要在註解前加上設定關鍵字,EX:TODO,就可以在工作清單視窗內出現該註解

[VS] 工作清單優先順序-1

最近因為同時使用到兩種關鍵字,內建篩選功能是根據優先順序來篩選,沒有可以根據關鍵字的篩選方式,那就只能直接透過調整關鍵字的優先順序來達到篩選目標,調整 UNDONE 優先順序來說明

[VS] 工作清單優先順序-2

把 UNDONE 優先順序調低後,請不要去按 "確定" 按鈕,要先去按下圖的 "變更" 按鈕,才算是設定完成,Orz

[VS] 工作清單優先順序-3

設定完成後,在 UNDONE 關鍵字前,會出現一個往下符號,表示優先順序是低

[VS] 工作清單優先順序-4

在回到 VS 內就可透過篩選功能來只顯示 TODO 內容

[VS] 工作清單優先順序-5

Friday, April 21, 2017

[Win10] 啟動資料夾

在 Win10 上要把自行撰寫的程式,放在啟動資料夾,希望一開機就執行

在執行內輸入 shell:startup 就可以叫出啟動資料夾

[Win10] 啟動資料夾-1

Thursday, April 20, 2017

GodexRT730X - 撕紙位置

新買一台標籤機 - GodexRT730X,安裝測試時就發現到,為什麼必須開啟機器才有辦法撕紙阿,Orz

下圖紅線是正常撕紙位置,綠線是 8x5 紙張,張和張之間的撕線

GodexRX730X-1

透過 NetSetting 軟體,把 Tear-off Position 設定,從預設 12 改為 16,這樣才能不需要打開機器並把紙張撕下來,上圖綠線位置接近紅色位置

GodexRX730X-2

Wednesday, April 19, 2017

[LINQ] OrderBy - 隨機排序

實務上有該需求,在 TSQL 是利用 ORDER BY NEWID() 來達到需求,C# 內則是透過 Random 來做到
namespace LINQRandom
{
    class Program
    {
        static void Main(string[] args)
        {
            Random r = new Random(Guid.NewGuid().GetHashCode());

            var result = Enumerable.Range(0, 10).OrderBy(o => r.Next());

            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
        }
    }
}
[LINQ] 隨機排序