LINQ语法 收藏

<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查询符列表

Query Operators

Meaning in Life

from, in

Used to define the backbone for any LINQ expression, which allows you to extract a subset of data from a fitting container.

where

Used to define a restriction for which items to extract from a container.

select

Used to select a sequence from the container.

join, on, equals, into

Performs joins based on specified key. Remember, these joins do not need to have anything to do with data in a relational database.

orderby, ascending, descending

Allows the resulting subset to be ordered in ascending or descending order.

group, by

Yields a subset with data grouped by a specified value.


另外还有一些没有操作符号,而是以扩展函数(泛型函数)的方式提供的函数:
用不同方式产生结果集: 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、生成新的数据类型(投影)

var makesColors = from c in myCars select new {c.Make, c.Color};


6、Reverse<T>()

var subset = (from c in myCars select c).Reverse < Car > ();
foreach (Car c in subset)
{
Console.WriteLine("{0} is going {1} MPH", c.PetName, c.Speed);
}


或者

var subset = from c in myCars select c;
foreach (Car c in subset.Reverse < Car >
())
{
Console.WriteLine(c.ToString());
}


7、排序
默认是ascending

// Order all the cars by PetName.
var subset = from c in myCars orderby c.PetName select c;
// Now find the cars that are going less than 55 mph,
// and order by descending PetName

subset = from c in myCars
where c.Speed >
55 orderby c.PetName descending select c;


默认顺序时也可以明确指明

var subset = from c in myCars
orderby c.PetName ascending select c;


8、Enumerable.Except()
两个IEnumerable<T>兼容的对象的差集

static void GetDiff()
{
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)类型。

class Program
{
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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值