<script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length>300) { text = text + "/r/n/n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } </script> <script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>
一、LINQ查询符列表
另外还有一些没有操作符号,而是以扩展函数(泛型函数)的方式提供的函数: 用不同方式产生结果集: Reverse<>(), ToArray<>(), ToList<>() 集合操作: Distinct<>(), Union<>(), Intersect<>() 统计函数: Count<>(), Sum<>(), Min<>(), Max<>() 二、使用Enumerable获取Counts 为了使用这些Enumerable扩展函数,一般把LINQ查询表达式用括号括起来,先转换为IEnumerable<T>兼容的对象。
static void
GetCount()
{ string [] currentVideoGames = { " Morrowind " , " BioShock " , " Half Life 2: Episode 1 " , " The Darkness " , " Daxter " , " System Shock 2 " }; // Get count from the query. int numb = (from g in currentVideoGames where g.Length > 6 orderby g select g).Count < string > (); // numb is the value 5. Console.WriteLine( " {0} items honor the LINQ query. " , numb); } 三、定义演示的实例
class
Car
{ public string PetName = string .Empty; public string Color = string .Empty; public int Speed; public string Make = string .Empty; public override string ToString() { return string .Format( " Make={0}, Color={1}, Speed={2}, PetName={3} " , Make, Color, Speed, PetName); } }
static void Main( string
[] args)
{ Console.WriteLine( " ***** Fun with Query Expressions *****"n " ); // This array will be the basis of our testing Car[] myCars = new [] { new Car{ PetName = " Henry " , Color = " Silver " , Speed = 100 , Make = " BMW " }, new Car{ PetName = " Daisy " , Color = " Tan " , Speed = 90 , Make = " BMW " }, new Car{ PetName = " Mary " , Color = " Black " , Speed = 55 , Make = " VW " }, new Car{ PetName = " Clunker " , Color = " Rust " , Speed = 5 , Make = " Yugo " }, new Car{ PetName = " Hank " , Color = " Tan " , Speed = 0 , Make = " Ford " }, new Car{ PetName = " Sven " , Color = " White " , Speed = 90 , Make = " Ford " }, new Car{ PetName = " Mary " , Color = " Black " , Speed = 55 , Make = " VW " }, new Car{ PetName = " Zippy " , Color = " Yellow " , Speed = 55 , Make = " VW " }, new Car{ PetName = " Melvin " , Color = " White " , Speed = 43 , Make = " Ford " } }; // We will call various methods here! Console.ReadLine(); } 四、LINQ语法 基本语法
var result = from item
in container orderby value ascending/descending select item; 1、获取全部记录
var allCars = from c in myCars select c;
2、只获取字段名称
var names = from c in myCars select c.PetName;
这里names就是隐式类型的变量。3、使用Enumerable.Distinct<T>()
var makes = (from c in myCars select c.Make).Distinct < string > ();
4、即可以在定义的时候调用Enumberalbe扩展函数
var names = from c in
myCars select c.PetName;
foreach (var n in names) { Console.WriteLine( " Name: {0} " , n); } 也可以在兼容的数组类型上调用
var makes = from c in
myCars select c.Make;
Console.WriteLine( " Distinct makes: " ); foreach (var m in makes.Distinct < string > ()) { Console.WriteLine( " Make: {0} " , m); }
// Now get only the BMWs.
var onlyBMWs = from c in myCars where c.Make == " BMW " select c;
// Get BMWs going at least 100 mph.
var onlyFastBMWs = from c in myCars where c.Make == " BMW " && c.Speed >= 100 select c; |
5、生成新的数据类型(投影)
6、Reverse<T>()
foreach (Car c in subset)
{
Console.WriteLine("{0} is going {1} MPH", c.PetName, c.Speed);
}
或者
foreach (Car c in subset.Reverse < Car > ())
{
Console.WriteLine(c.ToString());
}
7、排序
默认是ascending
var subset = from c in myCars orderby c.PetName select c;
// and order by descending PetName
subset = from c in myCars
where c.Speed > 55 orderby c.PetName descending select c;
默认顺序时也可以明确指明
orderby c.PetName ascending select c;
8、Enumerable.Except()
两个IEnumerable<T>兼容的对象的差集
{
List < string > myCars = new List < String >
{ " Yugo " , " Aztec " , " BMW " };
List < string > yourCars = new List < String >
{ " BMW " , " Saab " , " Aztec " };
var carDiff = (from c in myCars select c)
.Except(from c2 in yourCars select c2);
Console.WriteLine( " Here is what you don't have, but I do: " );
foreach ( string s in carDiff)
Console.WriteLine(s); // Prints Yugo.
}
五、使用LINQ查询结果
如果查询结果是强类型的,如 string[],List<T>等,就可以不用var类型,而是使用合适的IEnumerable<T>或 IEnumerable(因为IEnumerable<T>也扩展了IEnumerable)类型。
{
static void Main( string [] args)
{
Console.WriteLine( " ***** LINQ Transformations *****"n " );
IEnumerable < string > subset = GetStringSubset();
foreach ( string item in subset)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
static IEnumerable < string > GetStringSubset()
{
string [] currentVideoGames = { " Morrowind " , " BioShock " ,
" Half Life 2: Episode 1 " , " The Darkness " ,
" Daxter " , " System Shock 2 " };
// Note subset is an IEnumerable<string> compatible object.
IEnumerable < string > subset = from g in currentVideoGames
where g.Length > 6
orderby g
select g;
return subset;
}
}
分页处理:
var custTotalOrders = from c in db.D_WorkCenter
//join o in db.Orders
//on c.CustomerID equals o.CustomerID into custOrders
//from o in custOrders
select new
{
WorkCenterID = c.WorkCenterID,
WorkCenterName = c.WorkCenterName
//OrderTotal = o.Order_Details.Sum(d => d.UnitPrice * d.Quantity)
};
GridView1.DataSource = custTotalOrders.Skip(1).Take(GridView1.PageSize);
GridView1.DataBind();