Category Archives: .Net Tips And Tricks

C# Distinct List of Object

今日在Code Review 同事的Code 時候發現了一個有趣的寫法
他想做的是 Return 一個Distinct 左既 List Of Object

好直接既想法是使用 Distinct

List.Distinct();

之後發現Distinct 是不能 Distinct Object的
同事的寫法是用了 List 加 GroupBy 和Select First()

List.GrounBy(x=> x.key).Select(x => x.First())

之後發現.. 原來我們可以使用 GroupBy 加 First 來做到 Distinct Object的效果
以下是我的 Code Sample

void Main()
{
	var list = new List<Example>();
	list.Add(new Example() {Id=1, Name="Example 1", Comment="Comment 1" });
	list.Add(new Example() {Id=1, Name="Example 1", Comment="Comment 1" });
	list.Add(new Example() {Id=1, Name="ExamplE 1", Comment="Comment 2" });
	list.Add(new Example() {Id=2, Name="Example 2", Comment="Comment 3" });
	list.Add(new Example() { Id = 2, Name = "example 2", Comment = "Comment 3" });
	list.Add(new Example() { Id = 3, Name = "Example 3", Comment = "Comment 3" });
	list.Add(new Example() { Id = 4, Name = "Example 4", Comment = "Comment 3" });
	list.Add(new Example() { Id = 5, Name = "Example 5", Comment = "Comment 3" });

	Console.WriteLine("Use List.Distinct()");
	list.Distinct().Dump();

	Console.WriteLine("Use Group By Fields");
	list.GroupBy(x => new {x.Id, Name=x.Name}).Select(x =>x.First()).Dump();

	Console.WriteLine("Use Group By and make it ignore case");
	list.GroupBy(x => new {x.Id, Name=x.Name.ToLower()}).Select(x =>x.First()).Dump();
}

public class Example
{
	public int Id { get; set; }
	public string Name { get; set; }
	public string Comment {get;set;}
}

Output:

Hope you find it useful

Code-Playground

發覺返到香港越來越難集中去做自己既project
連blog 都少寫了
今日終於逼自己係GitHub 度開個repository
去寫下code 希望每星期都會commit到D code 同有blog post share
個project 叫做 Code-Playground
主要是用來share自己想寫既project
但係因為自己個根基比較弱..
上網跟住D Tutorial blog post 有時可能version / setup 問題
或是我想做的feature 比較複雜
所以都係做唔到Expected result

希望藉著呢個repository 可以和大家分享這些code和解決方法
和學習一下怎樣organise projects
Source code:
https://github.com/sharechiwai/code-playground

Demo site 會 deploy 到一些free的hosting 上
e.g.
Azure App Service
https://code-playground.azurewebsites.net
Happy Coding


dotnet watch does not refresh content for AspNetCore.SpaTemplates React / Angular

最近使用了 ASP.Net CoreSPA Template 來學習 ReactJs
因為我可以使用 ASP.Net Core 來做 Web API.. 而 ReactJs 來做 Web Front End
之後便可以deploy到 Azure 十分方便.. 又可以很快看到效果
ASP.Net Core App can NOW be deploy to Azure – (Azure web app)

由于使用Visual Studio 開發感覺比效慢
所以便用了Visual Studio Code

不久便出現了一個問題..就是在Visual Studio 開發時
修改 ReactJs 相關的程式碼..在Debug
是可以看到修改後的結果的
但是用Visual Studio Code 配合 “dotnet watch run” 時
Enable dotnet watch – on asp.net core

dotnet watch run

dotnet watch run


網頁便不會更新… 但是deployAzure 時是看到了修改的結果的

做了一會research之後 終於找到了解決方法

解決方法
我們需要使用另一個Terminal windows 執行 “webpack –watch” 這個指令 便可以了

webpack --watch

webpack --watch
Hope you find it useful

The target principal name is incorrect. Cannot generate SSPI context

由於最近公司有Product go Live, 所以有很多時候有些urgent 的問題要解決

又不幸的。。。我的電腦剛剛安裝好。。還安裝了Visual Studio 2017.
當我嘗試執行公司的Project時。。出現了以下的錯誤信息。。
The target principal name is incorrect. Cannot generate SSPI context
The target principal name is incorrect. Cannot generate SSPI context

起初還以為是Visual StudioSQL Server版本問題。。
當我仔細看了這個Error message和 connection string 之後。。
便發現問題是來自 Connection string… 因為有了兩隻不同的Login方法
而我們的電腦在Server上沒有Login的Permission

原本的connection string

<add name="ShareChiWaiContext" providerName="System.Data.SqlClient" connectionString="Data Source=sharechiwai.com;Initial Catalog=Blog;User ID=testUser;Password=TestPassword;Integrated Security=True;MultipleActiveResultSets=True" />

只要移除integrated = true 便可以了
解決了的 Connection String
E.g

<add name="ShareChiWaiContext" providerName="System.Data.SqlClient" connectionString="Data Source=sharechiwai.com;Initial Catalog=Blog;User ID=testUser;Password=TestPassword;MultipleActiveResultSets=True" />

Hope you find it useful