Custom Object Comparison in C#

A while ago, I needed to compare complex objects in C#. I forget to mention the real reason when I wrote the article and thanks to the feedback that I got, here is the main reason: Not only a Boolean result is needed from the comparison but also I need to have as output the properties with different values and the possibility to exclude properties from the comparison, . I looked for such function that would provide the same functionality of string.Compare() but for complex objects of the same type. Object.Equals() Method alone did not satisfy my need and it needed an implementation and overriding of the method which was not convenient. My next stop was stackoverflow and I found quite interesting approach in this discussion. That did not satisfy my need to the fullest so I took it as a start point and I had to implement my own comparison class (the implementation is available on GitHub with a running sample).

I created a static class Comparer with a constraint on the generic parameter to a class which satisfies my need. If you do not know what do constraints on type parameters mean, go to Microsoft docs (I recommend reading it and understanding what it is and why it is used because you will need it for sure). Then, reflection was the choice to get things done. PropertyInfo class which belongs to System.Reflection namespace was enough to do the work. This class allows us to get the different attributes of a property of an object and its metadata which I use to compare the properties of the 2 objects.

The created class offers different methods that you may find helpful :

GenerateAuditLog() method literally generates log. It returns an object of type ComparisonResult which can be inserted into logHistory table in your database. This method is overloaded so that you can exclude some properties from the comparison.

GenerateAuditLogMessages() method returns a list of messages that contains only changes. There is no overload for this method.

HasChanged() method simply returns Boolean result. You can eventually exclude some properties from the comparison. I found this method useful for updating records in the database.

That is all!! I hope you find it useful. Feel free to use the code or improve it.

Note: The code is not optimized (no DRY approach) because I take in consideration people who wants to use one method so they can copy the code simply (I personally recopy my code, improve it and adopt it to the case that I have).

Open Sourcing of Windows Calculator is great news for many developers

Microsoft announced on Wednesday 6th of March 2019 that it made Windows Calculator an open source software (you can find it on GitHub). Suddenly, the internet went crazy with memes and posts mocking the last announcement judging it as a small piece of code, it’s not worth it and blah blah blah.

Figure 1: Windows Calculator. source: me

I understand why some people are frustrated and see it as a small project and it is not worth it when comparing the project size with .NET or VS Code, but these people are narrow-minded. They did not look at it from a different angle. Well, let me explain the real value of the Windows Calculator in the open source world.

The calculator is a simple project that new developers and students make as one of their first projects, and they feel proud of it (at least I was proud of my Calculator project). You start with simple operations, but you find out that Parsing is needed and some conditions are a must so that the app does not crash.

Figure 2: young boys on computers. source: pixabay

Later on, complex operations can be added and the real dev problems appear, such as different results using different types (Float vs Double vs Decimal), or saving the last operations. And it keeps getting bigger and bigger. At this moment, beginners don’t know how to choose the right project structure or how to improve their code and write clean code. Imagine you have the source code of the most used calculator in the world made by the biggest Software Company worldwide! That’s insane.  Wait! Microsoft offered more than source code, it included the project Architecture, unit tests, and the build system.

The Application Architecture is useful even for junior developers and students. Solid use of the MVVM design pattern in a real application is helpful to plan their first applications.

Moreover, the Calculator application is written in Visual C++ (C++/CX), a set of extensions to the C++ language using for Win Apps and Win Runtime components, which is a solid programming language and it most students in universities have C++ classes. Microsoft offered them the semestral project to have great grades 😀 This is just joke, do not do it if you are a new learner, do it yourself and then you can compare your work. That way, you improve your skills and it is great to learn from your own mistakes 😉

 Windows calculator is built for the Universal Windows Platform using XAML UI framework. Developers can learn more about making their own custom controls and VisualStates, and that comes in handy for creating and publishing apps in Microsoft Store.

Finally, they won’t stop in the development phase, but they will learn Azure Pipelines for the build, deployment and release phases. This is so important because it can be hard to apply CI/CD in the first projects.

Figure 3: thumbs up. source: pixabay

To conclude, the Windows Calculator is the best example to learn Microsoft’s full development lifecycle.

Boost your productivity: Azure Data Studio

“I am suffering from these tools, they consume a lot of memory and they need a lot of space” or ” I am overwhelmed with the features of this tool, somehow I find myself lost and I can’t figure out how to do simple tasks”.. Does this sound familiar to you? Many tools nowadays offer great features but we need terabytes of storage to have them locally and a powerful device is needed too. Well, today is your lucky day if you are dealing with databases. Have you heard about Azure Data Studio? In this post, I will give you some tips to improve your work performance with Azure Data Studio. Here is the structure of this blog post.

Table of contents

Introduction

Overview

UI

Export User Settings

Change Terminal Shell

Subscriptions Filter

Connect to multiple Azure accounts

Run script from file

Introduction:

Azure Data Studio was firstly introduced in Pass Summit 2017 (it was called SQL Operations Studio). It is a cross-platform tool for database design and operations. If you are friendly with Visual Code, you will love Azure Data Studio. It is a lightweight version, with the necessary tools and you won’t be overwhelmed with many features such as the case with SSMS (Microsoft SQL Server Management Studio).

Overview:

Azure Data Studio is a light-weight cross-platform database management tool for Windows, MacOS, and Linux. It is free (no license needed) and it is an open source project. Azure Data Studio is based on VS Code and MSSQL extension in VS Code, written in ElectronJS. You can report bugs, request new features and contribute to the project. Extensions are an amazing feature of Visual Code, so does the Azure Data Studio, you can add extensions but they are not that much (for the moment 😉 ).

It supports Azure SQL Database, Azure Data Warehouse, MSSQL Server whether running in cloud or on-premises. T-SQL Query is mainly supported by autosuggestions, formatting and advanced coding features. Meanwhile, it still supports other languages such as JSON, XML, Python, SQL, yaml, dockerfile… In addition, you can work with workspaces, folders. Source Control (GIT) is integrated, so no problem with managing your files. This is an amazing feature especially for those who opt for CI/DI pipeline using Azure DevOps. Speaking of Azure, Azure Resource Explorer is a panel in Azure Data Studio that allows you to connect to your Azure account(s) and work with your different subscriptions. If you work with PowerShell or different shells, you can do it also in Azure Data Studio thanks to the internal terminal as it is the case with Visual Code. It has another bunch of features.

The Queen of Vermont and Entity Framework @Julie Lerman, a Microsoft Regional Director and MVP, wrote two blog posts in MSDN magazine about Azure Data Studio: Data Points – Visual Studio Code: Create a Database IDE with MSSQL Extension(June 2017) and Data Points – Manage Data Across Multiple Sources with Azure Data Studio(December 2018). So, I advise you to read them because I am not repeating what she has already written (I don’t have her level of knowledge and skills so I won’t make it perfect the way she does). Meanwhile, I will give you some tips that will help you.

UI :

The User Interface of Azure Data Studio is similar to the one of Visual Code. It is simpler and not overwhelmed with menus. It has the classic left sidebar as it is the case in VS Code. You can split the window the way you want (literally limitless splitting). Figure 1 shows you how to change theme color.

Figure 1: change theme color

Export User Settings:

Most of us have at least 2 devices: a business laptop, and personal laptop/tablet. Let’s say you tested Azure Data Studio in your personal device and customized it. Then, you decided to install it in the second device with the same customized settings. I got you covered! It is easier than you think. I will recreate the two first steps in the Figure 2. (1) Open user settings by clicking on the Settings logo in the bottom left corner and then settings, you can open it from command palette: open it using the keyboard shortcut CTRL+comma. (2) Now, move the cursor over the tab and give it a right click, then “Reveal in Explorer”. (3) Copy the file settings.json and send it to your work device. (4) Repeat the same first steps in your work device and finish it by replacing the current settings.json file with the other file. Done.

Figure 2: export user settings

Change Terminal Shell:

The first time you install Azure Data Studio, you will have to choose default terminal shell. Later on, when you click on the add new terminal icon, you will get the same terminal shell, but what if I want to use Powershell and Cmd at the same time. To do so, you need to change the default terminal shell by opening the Command Palette (CTRL+Shift+P), then type “Select Default Shell” and hit the enter key. You can change the shell type by selecting one from the given list. There is another way to do it: Open User Settings (the first step in the previous Tip), then search for :

"terminal.integrated.shell.windows": “Shell path”

You have to change the path and you are ready to go.

For example, my default terminal shell is CMD so it looks like this

"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe"

In order to change it to PowerShell, I only replace the Shell path string

    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe"

*You have to repeat these steps every time you want to change the shell.

Subscriptions Filter:

It is a simple tip, but it is worth it in case you have many subscriptions. Azure Data Studio allows multiple linked accounts, that means you can connect to different Azure accounts and use all the resources at the same time, which is really COOL. However, you may have many subscriptions and you will not use all of them. To get rid of the unnecessary ones, you use the subscription filter by hovering over the account as it is demonstrated in Figure 3.

Figure 3: subscriptions filter

Connect to multiple Azure accounts:

I just discovered it while writing the Subscriptions Filter tip that it may be tricky to connect to a second or third Azure account. You need to click on the person icon (bottom left corner of the window). Figure 4 shows you the way.

Figure 4: connect to multiple Azure accounts

Run a script from file:

Internal terminals, an amazing feature that Azure Data Studio has. It makes the life of DB Admins easier, you don’t need to open many apps and windows, just all in one tool is needed. We all know that we can open a folder or a workspace in Explorer (Explorer panel of Azure Data Studio, not Windows Explorer), you have some file scripts and you want to run it. There is command provided for this task to run the active file or just the selected text in the active terminal. In Figure 5, you can see how it works. This command doesn’t have a keyboard shortcut by default (you can add one by editing the keyboard shortcuts 😉). To make it work, open the command palette and type:

Terminal: Run Active File in Active Terminal

Or

Terminal: Run Selected Text in Active Terminal
Figure 5: Run script from file

~*~*~*~*~*~

There are other features you will enjoy in Azure Data Studio and they will improve your work such as Auto Save (you don’t have to save changes with Ctrl+S every time), the process Explorer or peek a definition, etc.

The purpose of this blog post was showing some cool features of this great tool. You may notice that I did not mention anything related to working with databases, queries, or extensions; they need another blog post. For now, you can start with the Quickstarts Tutorials and the official documentation. If you don’t have it yet, you download it here.

Contribute

Please help the community by giving your feedback and contributing on GitHub.

— — — —

References

To write this blog post, I used the official documentation of Azure Data Studio, Julie Lerman blog posts in MSDN Magazine and two blogs from VisualStudioMagazine (here and here).

Why a blog

Source: pixabay.com

Why a blog?

Writing articles is so important for self-development for different reasons. First of all, it helps me with improving my writing skills, learning new words, and learning new stuff. Actually, I am my first reader, so I write about things that I find interesting, or I did struggle to learn it/use it since no useful information were available in the internet and I wanted to save people’s time. Also, I may write articles that is recommended or requested by the community.

Moreover, it encourages me to read more books (different genres) and read articles in order to get inspired by other writers and improve my vocabulary. Meanwhile, I found out that it let me decrease the amount of time that I used to spend in social media.

What kind of content?

The content of this blog will be mainly technical; it can be general engineering hacks or algorithms, and it can be also about a specific tool/software or programming language with its specifications which my not be transferrable as it is due to the details.

Meanwhile, I will be writing in Medium all the life style hacks, city guides for travelers and personal activities.

When

To keep up with what’s going on in the world and motivate myself to write more often, I will make my best to post twice a month (maybe more when I have free time). 1 article for 15 day because I write them when I commute to work and finish them during the weekend.

Free resources to Kickstart your journey with Microsoft technologies

In this article, you will gain access to many resources that you may didn’t know about it before. It is useful for students or anyone who wants to learn MS technologies. 

I have heard this sentence many times: 

I would like to learn new technologies, but I don’t have money to pay for a private courses or online education platforms.  

Well..  That is not true. Nowadays you can learn everything for free with only access to the Internet. There are many platforms sponsored by NGOs, Universities or Companies like Microsoft. 

Let’s go through the resources provided by Microsoft and its partners that will help you learn mainly .NET technology :

MVA will be deprecated by April 30, 2019 (update march 2019)

Microsoft virtual academy or MVA has been around for years. Basically, it is a free online school that provides different courses covering .NET and topics related to Microsoft products. Whether you are a beginner or intermediate level or advanced, MVA has something to offer. Moreover, if you have a problem learning in English, you can search for courses in your native language. 

To help you choose the right courses, MVA offers different Learning Paths and suggests some starting points for students, developers, etc.

To conclude, this platform is helpful for anyone interested in .NET Technologies.

— — — —

Microsoft AI school, launched in 2017, is one of the latest learning platforms offered by Microsoft. It is designed to help those who are interested in Data science and Artificial Intelligence to improve their skills. AI School has different courses with various levels. You can also find AI demos with code source in github. If you don’t know where to start, the platform will help you choose the learning path using the path builder, which is a real example of the implementation of Machine Learning to create magic tools. 

— — — —

Microsoft Learn is the newest learning platform added to the Microsoft family. According to the article that introduced Microsoft Learn, 
all content is organized by a learning path. For the moment, there are different paths to learn Azure, Windows development, and Business applications such as Power apps, Power BI, etc.

Microsoft Learn is replacing Microsoft Virtual Academy starting from January 2019.

If you are interested in other products rather than Azure and Business Applications, this is not the right place, but it will 
have for sure others learning paths in the future.

— — — —

Microsoft Tech Academy  is another learning platform by Microsoft where you can follow different pathways and customize it thanks to 4 filters : Product, Audience, Level and Partner.

The Tech Academy is part of the Tech Community  platform , which is a great place to find blogs, communities and community events around the world. You can also join a community and talk to many experts. 

— — — —

If you love shows and videos, then this was made for you. Channel9 offers amazing content in a format of shows / podcasts / discussions and videos from different Microsoft events. In fact, Channel 9 is behind all the live streaming of Microsoft events such as MS Build, Ignite, etc.  It has content in 41 languages. Moreover, you can download the videos in different formats (MP4 different qualities or audio MP3)  and most of them have captions in different languages. They also provide links to download the code samples from github. 

— — — —

Microsoft has also many channels on YouTube. Whether you want to have just an idea about the product, learn some ad-hoc or go through demos and workshops.  Here is a list of some channels :

Microsoft mechanics  youtube.com/OfficeGarageSeries

Microsoft Ignite  youtube.com/MicrosoftIgnite

Microsoft Azure youtube.com/windowsazure

Xamarin youtube.com/user/XamarinVideos

Power BI youtube.com/mspowerbi

Microsoft Visual Studio youtube.com/VisualStudio

Linkedin Engineering youtube.com/LIEngineering, check also their website engineering.linkedin.com

And the list goes on.

 

~*~*~*~*~*~

Now let’s see what Microsoft partners offer for free.

A great online school called edx.org offers many courses related to anything you can think about (I guess so :D).
According to their website, they have more than 19000 courses from 100+ Universities, companies and NGOs. You can attend all the courses for free. You only pay for the certification if you want to have it. 

Microsoft has different courses in edx.org. To check it, go to edx.org/school/microsoft

— — — —

Datacamp is an awesome platform to learn data science. They have different plans including a  free plan that offers 7 courses monthly and 100+ of practice challenges. Moreover, Microsoft offers different courses in partnership with Datacamp where you can practice for free.

— — — —

Pluralsight offers yearly subscription with “35-course limited library benefit” for students with Azure student subscription. To learn about this benefit, please read the dedicated help post here.

~*~*~*~*~*~

eBooks

If you are book fan, check out the free eBooks from Microsoft. Another free eBook provider is goalkicker.com : they have many eBooks covering different technologies. Many experts volunteered to create good content that you can learn and share it at no cost. 

~*~*~*~*~*~

We went through the different websites and platforms that are providing content, but what about the tools ?!well, I did not forget about it 😉 

 Microsoft Imagine

Formerly known as DreamSparkMicrosoft Imagine provides students with a set of software and tools for free. To obtain them, you need to create an account with your student email or verify your account using a Code provided by Microsoft (Contact Microsoft Student Partners in your University/Country or the regional Microsoft office to help you with it).

The same platform may offer you more if your school has a web store subscription, you can search it here, if it is not the case, try to convince your school to join the program. For more details, please check this link.

Github student pack 

Github gives you the opportunity to shine with 25 premium tools for 0$. You only need to verify your account with a student email. If you already have an account on github, just add your student email in your account settings. 

Azure for students 

You can claim 100$ credit in azure without a credit card. There are also many features for free such as Machine Learning Studio.

.

 

The list may not be complete, I will try to update it and provide you with interesting resources to build your career 🙂 

Feel free to reach me by email or on twitter @Sahbi_Mohamed