發表文章

目前顯示的是 9月, 2023的文章

C# List Distinct寫法

若List裡為值類型(Value Type Calss), 只需要使用下列語法, 就可以取得唯一清單 List<string> aList = dataList.Distinct().ToList(); 但若List裡面是放一個Class, 而且有多個屬性, 就需要額外加工一下, 才能真正取得唯一清單, 否則執行完上述語法後, 雖然不會錯誤, 但也沒效果。 需要在Class裡新增下列方法 public override bool Equals(object obj) public override int GetHashCode() 程式可以參考如下, public Class ClassA { public string A { get; set; } public string B { get; set; } public override bool Equals(object obj) { // 如果傳入的物件是null,返回false if (obj == null) return false; // 如果傳入的對象不是 ClassA 類型,返回false if (!(obj is ClassA)) return false; // 將傳入的對象轉換為 ClassA 類型 ClassA other = (ClassA)obj; // 根據需要比較 ClassA 的屬性,這裡比較A和B屬性 return A == other.A && B == other.B; } public override int GetHashCode() { // 使用性的HashCode來生成物件的HashCode return (A.GetHashCode()) ^ (B.GetHashCode()); } } 有了以上程式後, 再使用List.Distinct()時, 就有作用了。 20231117 : 透過Group...first也可以達到Distinct效果, 參考 這篇 。

C#, Entity Framework 執行速度優化

C#, Entity Framework, EF, 執行速度優化 .AsNoTracking() --> 資料不追蹤, 查詢結果不能直接執行SaveChanges() 以下是有關.AsNoTracking()的詳細說明: 跟蹤(Tracking):當你使用EF檢索數據時,EF默認會將檢索到的實體對象添加到內部上下文(DbContext)的跟蹤(或追蹤)中。這意味著EF將跟蹤這些對象的更改,並在適當的時候自動更新數據庫。 .AsNoTracking()的作用:當你調用.AsNoTracking()方法時,EF將停止跟蹤查詢返回的實體對象。這意味著即使你對這些對象進行了更改,EF也不會自動更新數據庫。這可以提高性能,特別是在只需要讀取數據而不需要進行更新操作的情況下。 性能優化:當你使用.AsNoTracking()時,EF不會生成額外的SQL語句來檢查實體對象的更改狀態 ,這可以減少數據庫交互的次數,從而提高性能。此外,不需要將實體對象添加到上下文的跟蹤中,也可以減少內存使用。 使用場景:.AsNoTracking()通常在以下情況下很有用: 當你只需要從數據庫中檢索數據,而不打算對其進行更新。 當你執行只讀操作,如報告生成或查詢操作。 當你處理大量數據,並且不需要EF自動追蹤所有這些對象的更改。 查詢結果不能直接執行SaveChanges() 可以透過把Entity.State變更為Modify後, 再SaveChange()。 var query = from data in dbContext.EntityABC.AsNoTracking() select data; 將Entity Framework的自動更改偵測功能關閉 DbContext.Configuration.AutoDetectChangesEnabled = false; 將Entity Framework的自動更改偵測功能關閉。當你對DbContext進行多個操作(如添加、更新、刪除實體)時,Entity Framework通常會自動檢測更改,並將其跟蹤在內部,以便在保存更改時進行適當的處理。將此設置為false會禁用自動更改偵測,這將在某些情況下提高性能,特別是當你處理大量數據時,因為它不再需要跟蹤每個

MSSQL, SSMS 顯示描述欄位或其他欄位

 HKEY\_CURRENT\_USER\\Software\\Microsoft\\Microsoft SQL Server\\100\\Tools\\Shell\\DataProject\\    V18.10 電腦\\HKEY\_CURRENT\_USER\\SOFTWARE\\Microsoft\\SQL Server Management Studio\\18.0\_IsoShell\\DataProject    SSVPropViewColumnsSQL70 字串 1,2,6,17,7,8; SSVPropViewColumnsSQL80 字串 1,2,6,17,7,8;    1    Column Name 2    Data Type 3    Length 4    Precision 5    Scale 6    Allow Nulls 7    Default Value 8    Identity 9    Identity Seed 10    Identity Increment 11    Row GUID 12    Nullable 13    Condensed Type 14    Not for Replication 15    Formula 16    Collation 17    Description

C#, LINQ 取得前幾筆資料

在這個範例中,我們使用 LINQ 查詢語法來進行查詢。首先,我們使用 from 子句定義範圍變數 person,然後使用 where 子句過濾符合條件的人,接著使用 orderby 子句按照年齡降序排序,最後使用 select 子句創建一個新的匿名類型,選擇我們感興趣的屬性。最終,我們使用 Take 方法獲取前五個人的結果並將其存儲在 result 變數中,然後通過廻圈列印出來。 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List people = new List { new Person { Id = 1, Name = "約翰史密斯", Age = 35 }, new Person { Id = 2, Name = "簡道", Age = 28 }, new Person { Id = 3, Name = "約翰強生", Age = 42 }, new Person { Id = 4, Name = "愛麗絲強森", Age = 31 }, new Person { Id = 5, Name = "鮑勃史密斯", Age = 40 }, new Person { Id = 6, Name = "傑克強森", Age = 29 }, }; var query = from person in people where person.Age >= 30 && person.Name.StartsWith("約翰") orderby person.Age descending select new { Id = person.Id, Name = person.Name, Age = person.Age };

C#, LINQ SQL子查詢

LINQ查詢首先從 "tables" 集合中選擇 "a" 值,然後使用 .Contains 方法來檢查主查詢中的 "table.a" 是否存在於子查詢的結果中。這相當於SQL中的 "a IN (SELECT a FROM tables)" 子查詢。 var result = from table in tables where (from subTable in tables select subTable.a).Contains(table.a) select table;

LINQ select group

LINQ select group void Main() { List<order> orders = new List<order> { new Order { OrderID = 1, OrderDate = DateTime.Parse("2023-09-21") }, new Order { OrderID = 2, OrderDate = DateTime.Parse("2023-09-22") }, // 添加更多订单 }; List<orderdetail> orderDetails = new List<orderdetail> { new OrderDetail { OrderDetailID = 1, OrderID = 1, ProductID = 101, UnitPrice = 10.0m, Quantity = 2 }, new OrderDetail { OrderDetailID = 2, OrderID = 1, ProductID = 102, UnitPrice = 15.0m, Quantity = 3 }, new OrderDetail { OrderDetailID = 3, OrderID = 2, ProductID = 103, UnitPrice = 20.0m, Quantity = 4 }, // 添加更多订单详情 }; var query = from order in orders join orderDetail in orderDetails on order.OrderID equals orderDetail.OrderID into orderGroup select new { Order = order, OrderDetails = orderGroup.ToList() }; foreach (var result in query) { Console.WriteLine($"Order

C#, EntityFramework, LINQ 跨資料庫進行Transaction控制

利用 dbContext.Database.BeginTransaction() 來控制 範例程式 string ora_con_str = ConfigurationManager.ConnectionStrings["ora_cnn_str"].ToString(); string ms_con_str = ConfigurationManager.ConnectionStrings["ms_cnn_str"].ToString(); SqlConnection msDbConn = new SqlConnection(ms_con_str); OracleConnection oraDbConn = new OracleConnection(ora_con_str); msDbConn.Open(); oraDbConn.Open(); using (DbContext dbContextTT = new DbContext(oraDbConn, false)) using (DbContext dbContextMS = new DbContext(msDbConn, false)) { using (var transactionTT = dbContextTT.Database.BeginTransaction()) using (var transactionMS = dbContextMS.Database.BeginTransaction()) { try { sql = @" insert into TEST_ALEX(A,C) select '111', 33 from dual "; rec = dbContextTT.Database.ExecuteSqlCommand(sql); sql = @" insert into A (A1, A2, A3) select 'A11','22','33'

Oracle 使用SQL查詢TABLE索引設定

使用SQL查詢TABLE索引設定 SELECT index_name, column_name, column_position FROM user_ind_columns WHERE table_name = upper('Table-Name');

MSSQL 查詢Table資料筆數(非即時)

 有時TABLE資料筆數太多, 無法查詢即時筆數, 可以透過下列語法, 查詢SQL Server記錄的筆數, 參考用, 非即時資料 select * from ( SELECT SCHEMA_NAME(A.schema_id) + '.' + A.Name TableName, AVG(B.rows) AS 'RowCount1' FROM sys.objects A INNER JOIN sys.partitions B ON A.object_id = B.object_id WHERE A.type = 'U' GROUP BY A.schema_id, A.Name ) AA where AA.TableName='dbo.'+'<table-name>' order by AA.RowCount1 desc

MSSQL 查詢Table的Index欄位

  SELECT OBJECT_SCHEMA_NAME(T.[object_id],DB_ID()) AS [Schema], T.[name] AS [table_name], I.[name] AS [index_name], AC.[name] AS [column_name], I.[type_desc], I.[is_unique], I.[data_space_id], I.[ignore_dup_key], I.[is_primary_key], I.[is_unique_constraint], I.[fill_factor], I.[is_padded], I.[is_disabled], I.[is_hypothetical], I.[allow_row_locks], I.[allow_page_locks], IC.[is_descending_key], IC.[is_included_column] FROM sys.[tables] AS T INNER JOIN sys.[indexes] I ON T.[object_id] = I.[object_id] INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id] INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id] WHERE T.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP' and T.[name]='<Table-Name>' ORDER BY T.[name], I.[index_id], IC.[key_ordinal]

Bootstrap 4 button styles

![DEMO](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLyqvr-l2WyvKvjTszA_zPseWNuE1gHlge-6K4iLrnKxygD5IHB5s6pr3cl4vxohUGW-mY4fIOc81eD9M-3Cd0yBYsySvvUE6fJivVQe8e_M7jqD6jsOmVFTxcarJDP1RDzTDqB9L5ORQnmpBKQu7cwMXLM3hqprR1MLDrqm4-CXKBxNIWlvTWp0ZYsUE/s728/Image%202874.png) ```html Primary Secondary Success Danger Warning Info Light Dark Link ```

MSSQL設定Oracle DBLINK

MSSQL要設定Oracle DBLINK需要做幾個前置作業 安裝Oracle Client (我是32位元和64位元都安裝) 設定tnsnames.ora檔案 安裝ODAC (Oracle data access component) (64位元) [ LINK ] SSMS設定DBLINK 伺服器物件 > 連結的伺服器 提供者 找到OraOLEDB.Oracle > 屬性, 打勾[允許Inprocess] 新增連結的伺服器 連結的伺服器 : DBLink名稱 伺服器類型(其他資料來源) 提供者 : Oracle Provider for OLE DB 資料來源 : tnsnames.ora 裡面的名稱

JQuery 取消每個Input欄位自動完成功能

$(':input').on('focus', function () { $(this).attr('autocomplete', 'off') });

Oracle 查詢Table Lock 及刪除Lock Session

查詢Lock Session SELECT s.sid, s.serial#, s.username, s.machine, s.program, -- l.type, -- l.lmode, -- l.request, o.object_name, o.object_type FROM v$session s JOIN v$locked_object l ON s.sid = l.session_id JOIN dba_objects o ON l.object_id = o.object_id; kill lock session --ALTER SYSTEM KILL SESSION 'sid,serial#'; ALTER SYSTEM KILL SESSION '516,16217';

DBLINK MSSQL 連線 Oracle SQL查詢語法

MSSQL 連線 Oracle SQL查詢語法 方法一 select * from OracleDBLinkName..SchemaName.TableName 方法二 select * from OPENQUERY(OracleDBLinkName,' select * from SchemaName.TableName where ColnameA=''A'' ');

Ajax不能做到的事

Ajax技術,為顧及安全性,是不支援檔案上傳的;不論你怎麼加屬性加header都無法達成檔案上傳 無法Submit到不同網站

ASP.NET C# 新增webservice網頁

圖片
[WebMethod] public string HelloGuy(string PersonName) { return "Hello " + PersonName; } public string HelloGirl(string GirlName) { return "Hi " + GirlName; }

Sublime Text3 常用快速鍵

快速跨行選取 shift + mouse右鍵

[Windows]快速刪除資料夾的檔案

透過檔案總管刪除資料夾時, 因為系統會先統計檔案大小, 所以若檔案數很多時, 就會執行很慢。 可以使用指令執行刪除檔案 REM 刪除檔案 (只會刪除檔案, 子資料夾不會刪除) del /f /s /q [資料夾路徑] REM 刪除資料夾 rmdir /s /q [資料夾路徑] del /f /s /q C:\MyOldData rmdir /s /q C:\MyOldData ref web: https://exfast.me/2019/05/windows-how-to-quickly-delete-a-large-number-of-files-and-folders/

使用Markdown寫Blogger

在Blogger版面配置新增HTML/Javascript小工具, 增加以下CODE <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js"></script> <script> var converter = new showdown.Converter(); var posts = document.querySelectorAll(".post-body,.snippet-item"); Array.prototype.forEach.call(posts, function(el, i){ if(el.innerHTML.indexOf("markdown") <= 1){ el.innerHTML = converter.makeHtml(el.innerHTML.replace("markdown","")); } }); var pres = document.querySelectorAll("pre"); Array.prototype.forEach.call(pres, function(el, i){ el.classList.add("prettyprint"); }); </script> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script> 就可以在Blogger的HTML模式寫Markdown語法了。 ※ 實測後, 發現若Markdown Code是包含<script>...</script>或可能有使用到特殊的語法, Markdown解析會失敗 ref web: https://etrex.blogspot.com/2017/03/blogger-code-

[JQuery] DIV Load Callback怎麼取得錯誤訊息

  $("#yourDivId").load("yourUrl", function(response, status, xhr) { if (status === "error") { // 加载失败,可以由xhr取得錯誤狀態及訊息 var errorMessage = "加载失败:" + xhr.status + " " + xhr.statusText; console.log(errorMessage); } else { // 載入成功 console.log("載入成功"); } });

[C# LINQ] inner join / left join / right join

  inner join : using System; using System.Collections.Generic; using System.Linq; public class Person { public int ID { get; set; } public string Name { get; set; } } public class Address { public int ID { get; set; } public string Street { get; set; } } class Program { static void Main() { List<Person> people = new List<Person> { new Person { ID = 1, Name = "Alice" }, new Person { ID = 2, Name = "Bob" }, new Person { ID = 3, Name = "Charlie" } }; List<Address> addresses = new List<Address> { new Address { ID = 1, Street = "123 Main St" }, new Address { ID = 2, Street = "456 Elm St" }, new Address { ID = 4, Street = "789 Oak St" } }; var query = from person in people join address in addresses on person.ID e

C# 桌面程式也能當作WebAPI服務器

圖片
有時希望桌面程式(Winform , Console...)也能接受別的程式呼叫觸發對應動作, 可以使用這個方法。 參考資料: https://blog.darkthread.net/blog/self-host-web-api/ STEP-01 在桌面程式程式(這裡使用Console), 透過Nuget安裝[Microsoft.AspNet.WebApi.SelfHost]。(輸入self host就可以找到) STEP-02 新增下面API服務CODE static void Main(string[] args) { //指定聆聽的URL var config = new HttpSelfHostConfiguration("http://localhost:22222"); //注意: 在Vista, Win7/8,預設需以管理者權限執行才能繫結到指定URL,否則要透過以下指令授權 //開放授權 netsh http add urlacl url=http://+:32767/ user=machine\username //移除權限 netsh http delete urlacl url=http://+:32767/ //設定路由 config.Routes.MapHttpRoute("API", "{controller}/{action}/{id}", new { id = RouteParameter.Optional }); //設定Self-Host Server,由於會使用到網路資源,用using確保會Dispose()加以釋放 using (var httpServer = new HttpSelfHostServer(config)) { //OpenAsync()屬非同步呼叫,加上Wait()