發表文章

目前顯示的是 7月, 2022的文章

[SourceTree]修改使用者帳號密碼

圖片
 之前曾經因為覺得gitlab的密碼太過簡單,因此改了密碼,沒想到SourceTree就一直無法連到gitlab的帳號了,在網上查到的方法,原來SourceTree比較麻煩,要把passwd檔移除才有辦法重新輸入帳號密碼,因此在這裡紀錄一下。 實作 1.移至此路徑:[UserName]\AppData\Local\Atlassian\SourceTree\ 2.找到passwd這個檔案將其移除 3.重新連線SourceTree時,就會要求輸入帳號密碼了

[C#] Linq Expression Mapper Model

圖片
 假設我們今天有一個modelA跟ModelB,那如果不使用AutoMapper,使用表達式有辦法將modelA轉換為ModelB嗎?答案是可以的,我們可以使用Invoke()來達到我們的目的。 實作: 1.建立測試用的模型 /// /// 測試模型 /// public class TestModel { public string Name { get; set; } public int Age { get; set; } } /// /// 測試模型A /// public class TestModelA { public string Text { get; set; } public int value { get; set; } } 2.建立測試資料 //測試資料 var test = new TestModel() { Age = 5, Name = "Baby" }; 3.建立Mapper用的表達式 //TestModel 轉換為 TestModelA 表達式 Expression< Func < TestModel , TestModelA > > selector = x => new TestModelA { Text=x.Name, value=x.Age }; 4.轉換modelA資料到modelB var modelA = selector.Compile().Invoke(test); Console.WriteLine($"Text:{modelA.Text};value:

[C#] Linq Expression Or,And clause

圖片
 如果今天有多個表達式,想要用「or」或者「and」將兩個表達式的條件串起來,該如何實作呢? 在爬了一些文後,我發現了這個寫法是最可行的。 實作: 1.新增一個 Expression 擴充方法 public static class ExpressionExtenssion { public static Expression< Func < T , bool > > ExpressionAnd< T >(this Expression< Func < T , bool > > expr1, Expression< Func < T , bool > > expr2) { var secondBody = expr2.Body.Replace( expr2.Parameters[0], expr1.Parameters[0]); return Expression.Lambda > (Expression.AndAlso(expr1.Body, secondBody), expr1.Parameters); } public static Expression< Func < T , bool > > ExpressionOr< T >(this Expression< Func < T , bool > > expr1, Expression< Func < T, bool > > expr2) { var secondBody = expr2.Body.Replace( expr2.Parameters[0], expr1.Parameters[0]); return Expression.Lambda< Func < T , bool > >

[SQL].sql檔案過大 無法匯入

圖片
 有些人在移轉資料庫的時候,可能習慣用產生指令碼,來產生sql檔去需求環境執行,這時候如果遇到資料表資料過多(假設500萬筆),SSMS可能就無法正常開啟此sql檔去執行,畫面載入的時候會遇到卡頓或直接當機的情形。 解決方法:  這時候可以改變執行sql指令的模式,我們不一定要透過SSMS來執行sql指令,也可以使用命令提式字元來執行。 1.打開命令提示字元 (win+R  => 輸入cmd) 2.執行sql檔案 範例: (1)SQLserver名稱:ScottSqlServer (2)SQL檔實體路徑:C:\Users\user\Desktop\T.sql (3)帳號:Test (4)密碼: psw *windows驗證登入: --sqlcmd - S < servername > - E - d < dbname - TRY > - i insert.sql --sqlcmd -S ScottSqlServer -E -i C:\Users\user\Desktop\T.sql *SQL Server驗證: --sqlcmd - S < servername > - U < username > - P < password > - d < dbname - TRY > - i insert.sql -- sqlcmd -S ScottSqlServer -U Test -P psw -E -i C:\Users\user\Desktop\T.sql

[windows]刪除windows update更新檔

圖片
 有時候windows系統更新,會遇到bug或者是導致系統卡頓,導致使用者無法正常進行操作,這時候最好的解決方法就是刪除更新檔了,到路徑:[控制台/程式集/程式和功能/已安裝的更新]選擇最新的安裝日期解除安裝即可。 實作: 1.到控制台點選「程式集」 2.點選「檢視已安裝的更新」 3.選擇最新的更新檔 點擊「解除安裝」

[C#]運用逐位運算子的概念實作權限功能

圖片
 一般在實做權限功能的時候,資料表的設計最直覺的做法,可能是有多少權限開多少boolin的欄位。但這個作法有一個問題,假設一開始我們的系統只有三個權限,分別是permission1,permission2,permission3,但今天客戶突然要再多一個權限permission4,此時我們資料表的欄位就不夠使用了,資料表需要再加一個為boolin的欄位permission4,以此類推,若未來一直不斷有新增權限出現,不就要一直不斷變更資料表的設計嗎? 因此我們需要改變設計方式,將資料類型boolin改為bigint,這樣我們只需要留一個欄位就可以存所有的權限,利用2進位的思考模式 permission1我們定義他的值為二進位的(1),permission2(10),permission3(100),若此時我們的使用者三個權限都有,就是1+10+100=111,再將二進位轉為10進位存入資料庫111=>7,此時這個7就代表permission 1,2,3了。 實作: static void Main(string[] args) { Console.WriteLine($"1<<0 :{1<<0}");//1 Console.WriteLine($"1<<1 :{1<<1}");//2 Console.WriteLine($"1<<2 :{1<<2}");//4 Console.WriteLine($"1<<3 :{1<<3}");//8 //has permission 1,2 (value:1+2=3) var permissionvalue = 3; var haspermission1 = ((TestType)permissionvalue).HasFlag(TestType.permission1); Console.WriteLine("haspermi