实现了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运行