LINQ via C#
Recently I am giving a series of talk on LINQ. the name “LINQ via C#” is copied from “ CLR via C# ”, one of my favorite books. Currently part 1 – 8 are finished, and the entire series should be 10 parts. The contents are: Introducing LINQ What Is LINQ
LINQ via C# Events Posters Design
10 LINQ via C# events have been held successfully. Each event is a pure English speaking technical talk. I designed some posters for the events, with no enough time to design for each event. LINQ via C# part 4 In part 3, lambda expression of C# is introduced...
Introducing LINQ (1) What Is LINQ
[ LINQ via C# series ] This LINQ series is from my 10 parts of LINQ via C# talks . And the poster designs for the events are here . What is LINQ Here is the roadmap of .NET and C#: Date .NET Framework CLR C# IDE Introduced Features February 13th, 2002...
Introducing LINQ (2) Advancements Overview
[ LINQ via C# series ] According to MSDN : LINQ is one of Microsoft’s most exciting, powerful new development technologies. Independent to data source This sample mentioned in part 1 is working on items in a .NET array: var results = from number in source...
Understanding C# 3.0 Features (1) Automatic Property
[ LINQ via C# series ] As the fundamental of LINQ, This chapter will explain the new language features of C# 3.0, all of which are syntactic sugars. This part is about the automatic property. In C# 2.0 a property can be declared like this: public class...
Understanding C# 3.0 Features (2) Object Initializer And Collection Initializer
[ LINQ via C# series ] Take this Person type as an example: public class Person { public string Name { get ; set ; } public int Age { get ; set ; } } Object initializer In C# 2.0 we create an Person instance and initialize it like this: Person person...
Understanding C# 3.0 Features (3) Type Inference
[ LINQ via C# series ] The “var” keyword has been introduced from the beginning . It is a new language feature called type inference in C# 3.0. Local variable type inference Consider the local variable declaration and initialization: TypeName a = b; Since...
Understanding C# 3.0 Features (4) Anonymous Type
[ LINQ via C# series ] This feature provides a way to create an instance without declare the type: var mark = new { Name = "Mark" , Age = 18 }; Since the type name is unknown at this time when writing code, this is called a anonymous type. Compilation...
Understanding C# 3.0 Features (5) Extension Method
[ LINQ via C# series ] Extension method is a fancy and powerful syntactic sugar in C# 3.0. Extension methods are very important when writing functional style C# code. Define an extension method for a class When we define an extension method for a type...
Understanding C# 3.0 Features (6) Lambda Expression
[ LINQ via C# series ] Lambda expression is another powerful syntactic sugar making C# functional. In this post, “Lambda expression” simply means “C# Lambda expression”. The native concept of lambda expression will be introduced in the later lambda calculus...
Understanding C# 3.0 Features (7) Query Expression
[ LINQ via C# series ] This kind of code has been introduced again and again: var positive = from number in source where number > 0 orderby number descending select number.ToString( CultureInfo .InvariantCulture); This is called the query expression...
Understanding C# 3.0 Features (8) Partial Method
[ LINQ via C# series ] The is a very simple feature. From partial class to partial method Partial class is introduced by C# 2.0. With the partial keyword, the definition of one type is able to be divided into several files. For example, if creating a...
Understanding LINQ to Objects (1) Programming Paradigm
[ LINQ via C# series ] Declarative vs. imperative This post mentioned that LINQ introduced new programming constructs to C#. Take a look at the samples in the beginning post : int [] source = new int [] { 0, -5, 12, -54, 5, -67, 3, 6 }; List < int...
Understanding LINQ to Objects (2) Method Chaining
[ LINQ via C# series ] It is obvious the Where(), OrderBy(), Select() can be invoked fluently: int [] source = new int [] { 0, 1, -2, 3, 24, 6, 3 }; var results = source.Where(item => item > 0 && item < 10) .OrderBy(item => item) ...
Understanding LINQ to Objects (3) Query Methods
[ LINQ via C# series ] After understanding the programming paradigm and why LINQ query methods can be chaining , this post shows the details of LINQ query methods. Methods like Where(), OrderBy(), OrderByDescending(), and Select() are exhibited again...
Understanding LINQ to Objects (4) Iterator Pattern
[ LINQ via C# series ] According to Wikipedia : Iterator pattern is a design pattern in which iterators are used to access the elements of an aggregate object sequentially without exposing its underlying representation. An Iterator object encapsulates...
Understanding LINQ to Objects (5) Implementing Iterator
[ LINQ via C# series ] Iterator pattern is the core pattern of LINQ to Objects implementation. To filter, order, or project the data items of a data collection, of course the code need to go through the collection and figure out the results. The previous...
Understanding LINQ to Objects (6) Deferred Execution
[ LINQ via C# series ] One post at the beginning of this series mentioned that deferred execution is a important advancement of LINQ. The following code show how is the execution deferred: IEnumerable < int > source = Enumerable .Range(-2, 5); ...
Understanding LINQ to Objects (7) Query Methods Internals
[ LINQ via C# series ] This post explains how are the LINQ to Objects standard query methods implemented. Once again, it will be exhibited that iterator pattern is the core pattern of LINQ to Objects query. The first thing need to emphasize is, not all...
Understanding LINQ to Objects (8) The Design Of IEnumerable
[ LINQ via C# series ] Currently in .NET, iterator pattern is implemented via IEnumerable and IEnumerator (or IEnumerable and IEnumerator): namespace System.Collections { // Represents a collection which can be iterated. public interface...
Understanding LINQ to SQL (1) Object-Relational Mapping
[ LINQ via C# series ] According to Wikipedia , Object-relational mapping is: a programming technique for converting data between incompatible type systems in relational databases and object-oriented programming languages. This is the LINQ to SQL sample...
Understanding LINQ to SQL (2) IQueryable
[ LINQ via C# series ] The core of LINQ to Objects is IEnumerable: Query methods are designed for IEnumerable as extension methods , like Where(), Select(), etc.; Query methods are designed to be fluent, LINQ to Objects queries can be...
Understanding LINQ to SQL (3) Expression Tree
[ LINQ via C# series ] In LINQ to Objects, lamda expressions are used everywhere as anonymous method, like Where(): public static IEnumerable Where( this IEnumerable source, Func predicate...
Understanding LINQ to SQL (4) Data Retrieving Via Query Methods
[ LINQ via C# series ] After understanding: object model generating from SQL Server schema query method chaining on IQueryable SQL are translated from expression tree, which is required by IQueryable now it is time to take a deeper look...
Understanding LINQ to SQL (5) Remote And Local Method Call
[ LINQ via C# series ] Since LINQ to SQL is translating C# methods into SQL, all the C# methods are required to make sense in SQL. According to MSDN : A local method call is one that is executed within the object model. A remote method call is one that...
Understanding LINQ to SQL (6) Working With Deferred Execution
[ LINQ via C# series ] Similar with LINQ to Objects, LINQ to SQL supports deferred execution when possible. For example: using ( NorthwindDataContext database = new NorthwindDataContext ()) { IQueryable < Category > source = database.Categories;...
Understanding LINQ to SQL (7) Data Changing
[ LINQ via C# series ] After understanding how to retrieve data with LINQ to SQL, now take a look at data change (create (insert) / update / delete). Object Identity When changing data queried by LINQ to SQL, one common confusion for LINQ to SQL beginners...
Understanding LINQ to SQL (8) Transaction
[ LINQ via C# series ] Database data Changing cannot be talked about without transactions . Implementing TRANSACTION (BEGIN / COMMIT / ROLLBACK) The previous post has shown that, when invoking SubmitChanges(), the translated SQL (INSERT / UPDATE / DELETE...
Understanding LINQ to SQL (9) Concurrent Conflict
[ LINQ via C# series ] Conflicts are very common when concurrently accessing the same data. Conflicts in concurrent data access The following code presents the concurrent conflict scenario: Action < int , Action < Category >> updateCategory...
Understanding LINQ to SQL (10) Implementing LINQ to SQL Provider
[ LINQ via C# series ] So far LINQ to SQL data CRUD (Creating / Retrieving / Updating / Deleting) has been explained. This post takes a deeper look at the internal implementation of LINQ to SQL query. The provider model Unlike IEnumerable / IEnumerable...
Understanding LINQ to SQL (11) Performance
[ LINQ via C# series ] LINQ to SQL has a lot of great features like strong typing query compilation deferred execution declarative paradigm etc., which are very productive. Of course, these cannot be free, and one price is the performance. O/R mapping...