例子如下:
static void Main(string[] args)
{
//定义匿名类的数组对象
var peo = new[]
{
new {Name = "ppp1",LastName= "a",ID=2001},
new {Name = "ppp2",LastName= "b",ID=2002},
new {Name = "ppp3",LastName= "c",ID=2003},
new {Name = "ppp4",LastName= "d",ID=2004}
};
//方式1, 通过泛型接口的引用实现
IEnumerable<string> p_name = peo.Select(cust => cust.Name+cust.LastName);
foreach (string str in p_name)
{
Console.WriteLine(str);
}
IEnumerable<int> p_id = peo.Select(cust => cust.ID);
foreach (int id in p_id)
{
Console.WriteLine(id);
}
//方式2,在lambda里面定义匿名类
//new 后面的大括号只是一条语句
var cust_Name = peo.Select(cust => new { Name = cust.Name, LastName = cust.LastName });
foreach (var i in cust_Name)
{
Console.WriteLine(i);
}
//方式3,通过定义一个类
IEnumerable <Names> cu = peo.Select(cust => new Names
{
FirstName = cust.Name,
LastName = cust.LastName
}
);
foreach (Names n in cu)
{
Console.WriteLine(n.FirstName + n.LastName);
}
}
}
class Names
{
public string FirstName;
public string LastName;
}
筛选数据:
//通过where实现找出LastName为c的。
IEnumerable<string> p_name = peo.Where(addr => addr.LastName=="c").Select(cust => cust.Name+cust.LastName);
foreach (string str in p_name)
{
Console.WriteLine(str);
}
//通过OrderBy通过对某个元素排序得出顺序
IEnumerable<string> p_name = peo.OrderBy(addr => addr.ID).Select(cust => cust.Name+cust.LastName);
foreach (string str in p_name)
{
Console.WriteLine(str);
}
分组:
var peo = new[]
{
new {Name = "ppp1",LastName= "a",ID=2011},
new {Name = "ppp2",LastName= "a",ID=2002},
new {Name = "ppp3",LastName= "b",ID=1903},
new {Name = "ppp4",LastName= "c",ID=2004}
};
//分组GroupBy
var Group = peo.GroupBy(addr => addr.LastName);
//分组之后,数据就变成2维的了。外层是组
foreach (var group in Group)
{
//用来分组的那个成员
Console.WriteLine(group.Key);
//该组的数据个数
Console.WriteLine(group.Count());
//内层是某个组的数据
foreach (var p in group)
{
Console.WriteLine(p.Name + p.LastName);
}
}
统计数量时,去掉重复
int i = peo.Select(pp => pp.LastName).Count();
Console.WriteLine(i);
//Distinct 去掉重复
i = peo.Select(pp => pp.LastName).Distinct().Count();
Console.WriteLine(i);