Created
November 14, 2018 09:50
-
-
Save monir-dev/1cc62a81aa17f979f46a937fec87644b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| LINQ Cheat Sheet By: Monir Hossain | |
| Restriction | |
| context.Courses.Where(c => c.Level == 1); | |
| Ordering | |
| context.Courses | |
| .OrderBy(c => c.Name) // or OrderByDescending | |
| .ThenBy(c => c.Level); // or ThenByDescending | |
| Projection | |
| context.Courses.Select(c => new | |
| { | |
| CourseName = c.Name, | |
| AuthorName = c.Author.Name // no join required | |
| }); | |
| // flattens hierarchical lists | |
| var tags = context.Courses.SelectMany(c => c.Tags); | |
| Grouping | |
| var groups = context.Courses.GroupBy(c => c.Level); | |
| Inner Join | |
| Use when there is no relationship between your entities and you need to link them based on a | |
| key. | |
| var authors = context.Authors.Join(context.Courses, | |
| a => a.Id, // key on the left side | |
| c => c.AuthorId, // key on the right side, | |
| (author, course) => // what to do once matched | |
| new | |
| { | |
| AuthorName = author.Name, | |
| CourseName = course.Name | |
| } | |
| ); | |
| Group Join | |
| Useful when you need to group objects by a property and count the number of objects in each | |
| group. In SQL we do this with LEFT JOIN, COUNT(*) and GROUP BY. In LINQ, we use group | |
| join. | |
| var authors = context.Authors.GroupJoin(context.Courses, | |
| a => a.Id, // key on the left side | |
| c => c.AuthorId, // key on the right side, | |
| (author, courses) => // what to do once matched | |
| new | |
| { | |
| AuthorName = author.Name, | |
| Courses = courses | |
| } | |
| ); | |
| Cross Join | |
| To get full combinations of all objects on the left and the ones on the right. | |
| var combos = context.Authors.SelectMany(a => context.Courses, | |
| (author, course) => new { | |
| AuthorName = author.Name, | |
| CourseName = course.Name | |
| }); | |
| Partitioning | |
| To get records in a given page. | |
| context.Courses.Skip(10).Take(10); | |
| Element Operators | |
| // throws an exception if no elements found | |
| context.Courses.First(); | |
| context.Courses.First(c => c.Level == 1); | |
| // returns null if no elements found | |
| context.Courses.FirstOrDefault(); | |
| // not supported by SQL Server | |
| context.Courses.Last(); | |
| context.Courses.LastOrDefault(); | |
| context.Courses.Single(c => c.Id == 1); | |
| context.Courses.SingleOrDefault(c => c.Id == 1); | |
| Quantifying | |
| bool allInLevel1 = context.Courses.All(c => c.Level == 1); | |
| bool anyInLevel1 = context.Courses.Any(c => c.Level == 1); | |
| Aggregating | |
| int count = context.Courses.Count(); | |
| int count = context.Courses.Count(c => c.Level == 1); | |
| var max = context.Courses.Max(c => c.Price); | |
| var min = context.Courses.Min(c => c.Price); | |
| var avg = context.Courses.Average(c => c.Price); | |
| var sum = context.Courses.Sum(c => c.Price); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment