LINQ (语言集查询)

实现了IEnumerable接口的类型的实例可以用where
数组,list等都可以使用LINQ

示例

/******筛选*******/
var racers = form r in Formulal.GetChampions()
			where r.Wins>15 &&
			(r.Country == "Brazil"||r.Country == "Austria")
			select r;
foreach(var r in racers)
{
	console.WriteLine("{0:A}",r);
}
/*******索引筛选*******/
var racers = Formular.GetChampions().
			Where((r.index)=>r.LastName.StartsWith("A")&&index%2!=0);
	foreach(var rin racers)
	{
		console.WriteLine("{0:A}",r);
	}

/**********类型筛选**********/
object[] data ={"one",2,3,"four","five",6};
var query = data.OfType<string>();
foreach(var s in query)
{
	console.WriteLine(s);
}
//result: one four five

/*********复合的from子句*********/
var ferrarieDrivers = from r in Formulal.GetChampions()
					from c in r.Cars
					where c=="Ferrari"
					orderby r.LastName
					select r.FirstName +"." +r.LastName;
/*******排序********/
var racers = from r in Formulal.GetChampions()
			where r.Country =="Brazil"
			orderby r.Wins descending
			select r;
or 
var racers = Formulal.GetChampions().
			Where(r=>r.Country =="Brazil").
			OrderByDescending(r=>r.wins).
			Select.(r=>r);
/*******分组******/
var countries = from r in Formulal.GetChampions()
				group r by r.Country into g
				orderby g.Count() descending,g.key
				Where g.Count()>=2
				select new{
							Country = g.key,
							Count = g.Count()
							};
foreach (vaqr item in countries)
{
	Console.WriteLine("{0,-10} {1}",item.Countery,item.Count);
}

/******对嵌套的对象分组******/
var countries = from r in Formulal.GetChampions()
				group r by r.Country into g
				orderby g.Count() descending, g.Key
				where g.Count()>=2
				select new 
				{
					Country = g.Key,
					Count = g.Count(),
					Racers = from r1 in g
							orderby r1.LastName
							select r1.FirstName + " " + r1.LastName
				}foreach(var item in countries)
	{
		Console.WriteLine("{0,-10} {1}", item.Country,item.Count);
		foreach(var name in item.Racers)
		{
			console.Write("{0};",name);
		}
		console.WriteLine();
	}

/******连接******/
///两个查询
var racers = from r in Formulal.GetChampions()
			from y in r.Years
			where y > 2003
			select new
			{
				Year = y,
				Name = r.FirstName + " " + r.LastName
			};
var teams = from t in Formulal.GetContructorChampions()
			from y in t.Years
			where y > 2003
			select new
			{
				Year = y,
				Name=t.Name
			};
合并成一个查询
int year = 2003;
var racersAndTeams = from r in racers 
				join t in teams on r.Year equals t.Year
				select new
				{
					Year = r.Year,
					Racer = r.Name,
					Team = t.Name
				};
console.WriteLine("Year Champion " + "Constructor Title");
foreach(var item in racersAndTeams)
{
	console.writeLine("{0}: {1,-20} {2}",item.Year,item.Racer,item.Team);
}
/******合并****/
var racerNames = from in Formulal.GetChampions()
				where r.Country =="Italy"
				orderby r.Wins descending
				select new
				{
					Name = r.FirstName + " " + r.LastName
				};
			
var racerNamesAndStarts = from r in Formulal.GetChampions()
					where r.Country =="Italy"
					orderby r.Wins descending
					select new
					{
						LastName = r.lastName,
						Starts = r.Starts
					};
				
var racers = racersName.Zip(racerNamesAndStarts,
						(first, second)=>first.Name +", starts: " + second.Starts);
foreach(var r in racers)
{
	console.WriteLine(r);
}
/*****分区*****/
int pageSize = 5;
int numberPages = (int)Math.Ceiling(Formulal.GetChampions().Count()/(double)pageSize);
for(int page = 0; page<numberPages;page++)
{
	console.writerLine("Page {0}",page);
	var racers  = 
		(from r in Formulal.GetChampions()
		orderby r.LastName
		select r.FirstName + " " + r.LastName).
		Skip(page*pageSize).Take(pageSize);
		foreach(var name in racers)
		{
			console.WriteLine.(name);
		}
		console.WriteLine();
}	
//result:	
page 0
.
.
.
page 1.
.
.
.
page 2
.
.
.
				

聚合操作符
Count(),Sum(),Min(),Max(),Average(),Aggregate()

转换
ToList(),ToLookup()
生成操作符
Range(),Empty(),Repear()

var values=Enumerable.Range(1,20);
foreach(var item in values)
{
	console.write("{0} ",item);
}
console.WriteLine();

AsParallel()并行
AsParallel()并行表示使用多个CPU运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fwsylin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值