C# LINQ使用方法

文章介绍了LINQ(语言集成查询)的概念及其在处理数组、集合、XML和ADO.NET数据时的作用。详细讲解了Lambda表达式的用法,包括表达式和语句形式,以及在LINQ查询中的应用,如普通查询、orderby排序、select选择、groupby分组和join联接。还提到了匿名类型的使用,并展示了如何通过Lambda表达式进行数据过滤和选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LINQ 代表语言集成查询(language Integrated Query)可与数组、集合、XML、ADO.NET dataset使用

一、补充Lambda:“=>”运算符右边的表达式对运算符左边指定的参数执行操作,表达式的结果成为“=>”运算符的结果并返回。

1.Lambda表达式:

delegate int Incr(int v);

delegate bool IsEven(int v);

Incr incr = count => count + 2;

int x = incr(3); //输出5

IsEven isEven = n => n % 2 == 0;

isEven(2); //如果n为偶数返回true,为奇数返回false

2.Lambda语句:主题包括在大括号中,可以使用循环、if语句、声明变量

delegate int IntOp(int end);

delegate string StrMod(string s);

IntOp intOp = n => {

int r = 2;

for(int i =1; i <= n; i++)

r = i * r;

return r;

};

int x = intOp(2); // 返回4

StrMod strModReplace = s => {

return s.Replace(' ', '-');

};

string y = strModReplace("This is a test.");

二、LINQ 普通查询:

int[] nums = {1,2,3,6,7,16,-3,-6};

var posNums = from n in nums

where n > 0 && n < 10

select n;

foreach(int i in posNums) Console.write(i + " ");//输出1,2,3,6,7

三、LINQ orderby查询:

var posNums = from n in nums

orderby n desc

select n;

foreach(int i in posNums) Console.write(i + " ");//输出16,7......-6

四、LINQ select深入:

public string Name{get;set;}

public string Address{get;set;}

public EmailAddress(string n ,string a)

{

Name = n;

Address = a;

}

EmailAddress[] addrs = {

new EmailAddress("liu","liu.com"),

new EmailAddress("zhang","zhang.com"),

new EmailAddress("wang","wang.com")

}

var eAddrs = from entry in addrs

select entry.Address;

foreach(string s in eAddrs) Console.write(s + " ");//输出liu.com zhang.comwang.com

五、LINQ from嵌套:

class ChrPair{

public char First;

public char Second;

public ChrPair(char c,char c2)

{

First = c;

Second = c2;

}

}

char[] chrs = {'A','B','C'};

char[] chrs2 = {'X','Y','Z'};

var pairs = from ch1 in chrs

from ch2 in chrs2

select new ChrPair(ch1,ch2);

foreach(var p in pairs) Console.write("{0}{1}",p.First,P.Second + "-");

输出:AX-AY-AZ-BX-BY-BZ-CX-CY-CZ

六、LINQ group by:

LINQ join:

class Item{

public string Name{get;set;}

public bool ItemNumber{get;set;}

public Item(string n ,bool b){

Name = n;

ItemNumber = b;

}

}

class Item2{

public string Name2{get;set;}

public bool ItemNumber2{get;set;}

public Item2(string n ,bool b){

Name2 = n;

ItemNumber2 = b;

}

}

class Temp{

public string Name{get;set;}

public bool InStock{get;set;}

public Temp(string n ,bool b){

Name = n;

InStock = b;

}

}

Item[] items = {

new Item("a",true),

new Item("b",false),

new Item("c",false)

}

Item2[] items2 = {

new Item("e",true),

new Item("f",false),

new Item("g",true)

}

var list = from item in items

join entry in items2

on item.ItemNumber equals entry.ItemNumber

select new Temp(item.Name,entry.InStock);

foreach(Temp t in list)

{

Console.write("{0}\t{1}",t.Name,t.InStock);

}

输出:a true

b,false

七、LINQ 匿名类型:没有名称的类,用于创建select子句返回的对象

class Item{

public string Name{get;set;}

public bool ItemNumber{get;set;}

public Item(string n ,bool b){

Name = n;

ItemNumber = b;

}

}

class Item2{

public string Name2{get;set;}

public bool ItemNumber2{get;set;}

public Item2(string n ,bool b){

Name2 = n;

ItemNumber2 = b;

}

}

/*class Temp{

public string Name{get;set;}

public bool InStock{get;set;}

public Temp(string n ,bool b){

Name = n;

InStock = b;

}

}*/

Item[] items = {

new Item("a",true),

new Item("b",false),

new Item("c",false)

}

Item2[] items2 = {

new Item("e",true),

new Item("f",false),

new Item("g",true)

}

var list = from item in items

join entry in items2

on item.ItemNumber equals entry.ItemNumber

select new (Name = item.Name,InStock = entry.InStock); //匿名类

foreach(Temp t in list)

{

Console.write("{0}\t{1}",t.Name,t.InStock);

}

输出:a true

b,false

八、LINQ Lambda表达式:

int[] nums = {1,2,3,6,7,16,-3,-6};

var posNums = nums.Where(n => n > 0).Select( r => r);

foreach(int i in posNums) Console.write(i + " ");//输出1,2,3,6,7

//var posNums = nums.Where(n => n > 0).Select( r => r);这行代码创建了一个名为posNames的查询,改查询通过使用Where()方法(用于筛选值)和Select()方法(用于选择值)创建nums数组中的正数值。可以对nums数组调用Where()方法是应为所有数组都实现了IEnumerable<T>接口,IEnumerable<T>接口支持查询扩展方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值