c#
LINQ查询
- LINQ查询是对容器内容进行筛选的一个操作,与sql语句类似
表达式写法
- 表达式写法与sql语句的写法及其相似
举个例子(这边照抄了siki老师的例子):
var res = from m in masterList //表示从masterList集合中查询
//每个元素在本次查询中叫做m
where m.Level > 8 && m.Menpai == "丐帮" //添加查询条件
select m; //返回查询结果
扩展方法写法
- 可以写一个方法,参数是要查找的元素类型,返回值是bool型,作为list的Where方法的参数传进去
举个例子(还是siki老师的例子):
var res = masterList.Where(Test1);
static bool Test1(MartialArtsMaster master)
{
if(master.Level > 8) return true;
return false;
}
Lambda表达式写法
- 与扩展方法类似,不过这边直接用Lambda写法简化代码量
例子:
var res = masterList.Where(m=>m.Level>8); //一句话搞定 是真的香
联合查询
- 联合查询,顾名思义,联合多个list进行查询,联合查询的时候,会对每俩条来自不同list的数据建立映射查询一次,比如查询俩个list,一个有6个元素,一个有7个元素,总共会生成42条数据来供查询
写法实例:
var res = from m in masterList
from k in kongfuList
where m.kongfu == k.Name && k.Power > 90
select m;
当你要将俩个列表的元素都返回时,不妨建立新的联合变量,如下
var res = from m in masterList
from k in kongfuList
where m.kongfu == k.Name && k.Power > 90
select new{master = m, kongfu = k};
- 联合查询的扩展方法写法,这边需要通过SelectMany将俩个表联合起来,映射成一个新的表,然后再对其进行Where查询,用法难以言表,具体大家康康下面的例子
例子:
var res = masterList.SelectMany(m => kongfuList,(m,k) => new{master = m,kongfu = k}).Where(x => x.master.Kongfu == x.kongfu.Name);