LINQ LINQ Operators and Lambda Expression - Syntax & Examples
LINQ is a cool feature in C# 3.0. Most of the developers are struggling for the syntax and examples. Here I have collected various examples for each operator in LINQ and the equivalent Lambda Expressions.
Where
IEnumerable<Product>
x = products.Where(p => p.UnitPrice >= 10);
IEnumerable<Product> x =
from p in products
where p.UnitPrice >= 10
select p;
Select
IEnumerable<string>
productNames = products.Select(p => p.Name);
IEnumerable<string> productNames =
from p in
products select p.Name;
var
namesAndPrices =
products.
Where(p => p.UnitPrice >= 10).
Select(p => new { p.Name, p.UnitPrice }).
ToList();
IEnumerable<int>
indices =
products.
Select((product, index) => new { product,
index }).
Where(x => x.product.UnitPrice >= 10).
Select(x => x.index);
SelectMany
IEnumerable<Order>
orders =
customers.
Where(c => c.Country == "Denmark").
SelectMany(c => c.Orders);
var namesAndOrderIDs =
customers.
Where(c => c.Country == "Denmark").
SelectMany(c => c.Orders).
Where(o => o.OrderDate.Year == 2005).
Select(o => new { o.Customer.Name, o.OrderID
});
var namesAndOrderIDs =
customers.
Where(c => c.Country == "Denmark").
SelectMany(c => c.Orders, (c,o) => new { c, o }).
Where(co => co.o.OrderDate.Year == 2005).
Select(co => new { co.c.Name, co.o.OrderID
});
var
namesAndOrderIDs =
from c in customers
where c.Country == "Denmark"
from o in c.Orders
where o.OrderDate.Year == 2005
select new { c.Name, o.OrderID };
Take
IEnumerable<Product>
MostExpensive10 =
products.OrderByDescending(p => p.UnitPrice).Take(10);
Skip
IEnumerable<Product>
AllButMostExpensive10 =
products.OrderByDescending(p => p.UnitPrice).Skip(10);
TakeWhile SkipWhile
s.TakeWhile(p)s.SkipWhile(p)
Join
var custOrders =
customers.
Join(orders, c => c.CustomerID, o => o.CustomerID,
(c, o) => new { c.Name, o.OrderDate,
o.Total }
);
var custOrders =
from c in customers
join o in orders
on c.CustomerID equals
o.CustomerID
select new { c.Name, o.OrderDate,
o.Total };
GroupJoin
var custTotalOrders =
customers.
GroupJoin(orders, c => c.CustomerID, o => o.CustomerID,
(c, co) => new { c.Name, TotalOrders =
co.Sum(o => o.Total) }
);
var custTotalOrders =
from c in customers
join o in orders
on c.CustomerID equals
o.CustomerID into co
select new { c.Name, TotalOrders =
co.Sum(o => o.Total) };
var custTotalOrders =
from c in customers
join o in orders
on c.CustomerID equals
o.CustomerID
select new { c.Name, o.OrderDate,
o.Total };
var custTotalOrders =
from c in customers
join o in orders
on c.CustomerID equals
o.CustomerID into co
from o in co
select new { c.Name, o.OrderDate,
o.Total };
var custTotalOrders =
from c in customers
join o in orders
on c.CustomerID equals
o.CustomerID into co
from o in
co.DefaultIfEmpty(emptyOrder)
select new { c.Name, o.OrderDate,
o.Total };
Concat
IEnumerable<string>
locations =
customers.Select(c => c.City).
Concat(customers.Select(c => c.Region)).
Concat(customers.Select(c => c.Country)).
Distinct();
IEnumerable<string> locations =
new[] {
customers.Select(c => c.City),
customers.Select(c => c.Region),
customers.Select(c => c.Country),
}.
SelectMany(s => s).
Distinct();
OrderBy / ThenBy
IEnumerable<Product>
orderedProducts1 =
products.
OrderBy(p => p.Category).
ThenByDescending(p => p.UnitPrice).
ThenBy(p => p.Name);
IEnumerable<Product>
orderedProducts1 =
from p in products
orderby p.Category, p.UnitPrice descending,
p.Name
select p;
IEnumerable<Product>
orderedProducts2 =
products.
Where(p => p.Category == "Beverages").
OrderBy(p => p.Name, StringComparer.CurrentCultureIgnoreCase);
IEnumerable<string>
orderedProductNames =
products.
Where(p => p.Category == "Beverages").
Select(p => p.Name).
OrderBy(x => x);
GroupBy
IEnumerable<IGrouping<string,
Product>> productsByCategory =
products.GroupBy(p => p.Category);
IEnumerable<IGrouping<string,
string>> productNamesByCategory =
products.GroupBy(p => p.Category, p => p.Name);
Distinct
IEnumerable<string>
productCategories =
products.Select(p => p.Category).Distinct();
AsEnumerable
Table<Customer> custTable = GetCustomersTable();
var query = custTable.AsEnumerable().Where(c =>
IsGoodCustomer(c));
ToArray
string[] customerCountries =
customers.Select(c => c.Country).Distinct().ToArray();
ToList
List<Customer>
customersWithOrdersIn2005 =
customers.
Where(c => c.Orders.Any(o => o.OrderDate.Year == 2005)).
ToList();
ToDictionary
Dictionary<int,Order>
orders =
customers.
SelectMany(c => c.Orders).
Where(o => o.OrderDate.Year == 2005).
ToDictionary(o => o.OrderID);
Dictionary<string,decimal>
categoryMaxPrice =
products.
GroupBy(p => p.Category).
ToDictionary(g => g.Key, g => g.Group.Max(p => p.UnitPrice));
ToLookup
Lookup<string,Product> productsByCategory
=
products.ToLookup(p => p.Category);
IEnumerable<Product>
beverages = productsByCategory["Beverage"];
OfType
List<Person>
persons = GetListOfPersons();
IEnumerable<Employee>
employees = persons.OfType<Employee>();
Cast
ArrayList objects = GetOrders();
IEnumerable<Order>
ordersIn2005 =
objects.
Cast<Order>().
Where(o => o.OrderDate.Year == 2005);
ArrayList objects = GetOrders();
IEnumerable<Order>
ordersIn2005 =
from Order o in objects
where o.OrderDate.Year == 2005
select o;
First
string phone = "206-555-1212";
Customer c = customers.First(c => c.Phone ==
phone);
Single
int id = 12345;
Customer c = customers.Single(c => c.CustomerID
== id);
ElementAt
Product thirdMostExpensive =
products.OrderByDescending(p => p.UnitPrice).ElementAt(2);
Range
int[] squares =
Enumerable.Range(0, 100).Select(x => x * x).ToArray();
Repeat
long[] x = Enumerable.Repeat(-1L,
256).ToArray();
Empty
IEnumerable<Customer>
noCustomers = Enumerable.Empty<Customer>();
Any
bool b = products.Any(p => p.UnitPrice >= 100 &&
p.UnitsInStock == 0);
All
IEnumerable<string>
fullyStockedCategories =
products.
GroupBy(p => p.Category).
Where(g => g.Group.All(p => p.UnitsInStock > 0)).
Select(g => g.Key);
Count
int count = customers.Count(c => c.City ==
"London");
Sum
int year = 2005;
var namesAndTotals =
customers.
Select(c => new {
c.Name,
TotalOrders =
c.Orders.
Where(o => o.OrderDate.Year == year).
Sum(o => o.Total)
});
Min
var minPriceByCategory =
products.
GroupBy(p => p.Category).
Select(g => new {
Category = g.Key,
MinPrice = g.Group.Min(p => p.UnitPrice)
});
Max
decimal largestOrder =
customers.
SelectMany(c => c.Orders).
Where(o => o.OrderDate.Year == 2005).
Max(o => o.Total);
Average
var averageOrderTotals =
customers.
Select(c => new {
c.Name,
AverageOrderTotal = c.Orders.Average(o => o.Total)
});
Aggregate
var
longestNamesByCategory =
products.
GroupBy(p => p.Category).
Select(g => new {
Category = g.Key,
LongestName =
g.Group.
Select(p => p.Name).
Aggregate((s,
t) => t.Length > s.Length ? t : s)
});
http://www.c-sharpcorner.com/uploadfile/babu_2082/linq-operators-and-lambda-expression-syntax-examples
LINQ LINQ Operators and Lambda Expression - Syntax & Examples的更多相关文章
- Linq to Sql : 动态构造Expression进行动态查询
原文:Linq to Sql : 动态构造Expression进行动态查询 前一篇在介绍动态查询时,提到一个问题:如何根据用户的输入条件,动态构造这个过滤条件表达式呢?Expression<Fu ...
- Part 99 Lambda expression in c#
class Program { static void Main(string[] args) { List<Person> persons = new List<Person> ...
- Lambda Expression in C#
1.Expression Expression<Func<double, double>> exp = a => Math.Sin(a); 委托类型Func<dou ...
- C++ lambda expression
Emerged since c++11, lambda expression/function is an unnamed function object capable of capturing v ...
- hdu 1031 (partial sort problem, nth_element, stable_partition, lambda expression) 分类: hdoj 2015-06-15 17:47 26人阅读 评论(0) 收藏
partial sort. first use std::nth_element to find pivot, then use std::stable_partition with the pivo ...
- 浅析Java 8新特性Lambda Expression
什么是Lambda Expression 对于Lambda Expression,我的理解是,它是一个函数表达式,如下: (int x, int y) -> x - y 符号左边定义了函数的输入 ...
- Lambda Expression
Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口.下面这个例子就是使用Lambda语法来代替匿名的内部类 ...
- Variable used in lambda expression should be final or effectively final
Lambda与匿名内部类在访问外部变量时,都不允许有修改变量的倾向,即若: final double a = 3.141592; double b = 3.141592; DoubleUnaryOpe ...
- JDK 8 - Lambda Expression 的优点与限制
我们知道 JDK 8 新增了 Lambda Expression 这一特性. JDK 8 为什么要新增这个特性呢? 这个特性给 JDK 8 带来了什么好处? 它可以做什么?不可以做什么? 在这篇文章, ...
随机推荐
- 'autocomplete="off"'在Chrome 中不起作用
大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为&q ...
- MongoDB的TruncationException异常解决方法
近期由于DB4O的一些无解的BUG,导致现行的项目查询效率底下,于是愤而迁移到了MongoDB. MongoDB虽然比DB4O的用户要多一些,但是文档依然极度匮乏,遇到问题不是那么容易就能搜到解决办法 ...
- Oracle如何导入导出数据(转自)
导出:exp ssht/taxware@sshtfile=d:\ssht.dmpexp 用户名/密码@服务名导入:imp ssht/taxware@mysshtfile=d:\ssht.dmp fro ...
- X64操作系统组件Jmail无法正常服务问题
故障现象: 近日,在VMware虚拟化部署迁移中,之前物理服务器中部署网站ASP组件Jmail服务一切正常,迁移完成后发现Jmail无法正常工作,其余组件能正常工作. 环境:Windows Serve ...
- 2-4. Using auto with Functions
在C++14中允许使用type deduction用于函数参数和函数返回值 Return Type Deduction in C++11 #include <iostream> using ...
- My安卓知识4--Media Player called in state 0
//根据被传递的歌曲名称,选择播放的歌曲 public void playByName(String name){ mp = new MediaPlayer(); t ...
- en_windows_10_multiple_editions_version_1511_x64.iso
好久没折腾电脑了,这几天在E盘装了个64位Windows 10 TH2 专业版,从MSDN官网下载的英文原版镜像,用kms10未能激活,一看日志文件,说我这是零售版,后面就关掉了什么监听端口,然后就完 ...
- 搭建高可用mongodb集群(三)—— 深入副本集内部机制
在上一篇文章<搭建高可用mongodb集群(二)—— 副本集> 介绍了副本集的配置,这篇文章深入研究一下副本集的内部机制.还是带着副本集的问题来看吧! 副本集故障转移,主节点是如何选举的? ...
- DDX_Text ()函数 C++
DDX_Text()函数管理着对话框.表格视或控件视对象中的编辑控件与对话框.表格视或控件视对象的CString型数据成员之间的int,UINT,long,DWORD,CString,float或do ...
- 向NFV过渡 这三个坑我替你趟了
网络功能虚拟化(NFV)在最近几年不断发展,并开始现实商业部署.通信服务商也必须解决自身所面临的挑战,包括安全.性能.投入产出比.与现有网络实现电信级交互.运营支撑系统(OSS)和业务支撑系统(BSS ...