EF数据持久化笔记-2-linq

本文介绍LINQ查询的基础语法,包括关键字使用方法、查询结构及常见案例。覆盖from、where、select等关键字,演示如何实现精准、模糊查询及排序等功能。

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

LINQ

关键字
from 指定范围变量和数据源
where 根据bool表达式筛选数据
select 指定查询结果中的元素所具有的类型或表现形式
group 对查询结果分组
into 根据一个标识符,对join,group,select等结果子句的引用
orderby 对查询的结果进行排序
join 按照两个指定匹配条件连接数据源
let 产生一个用于存储子表达式查询结果的范围变量

写法结构
from [type] id in source
[join [type] id in source on expr equals expr [into subGroup]]
[from [type] id in source | let id = expr |where condition]
[orderby ordering,orderint,orderint…]
select expr | group expr by key
[into id query]

案例

			List<string> list = new List<string>();
            list.Add("111");
            list.Add("123");
            list.Add("124");
            list.Add("567");
            list.Add("89");
            //List<int> lists = list.Where(num=>num%2==0).ToList();
            var lists = (from num in list where num.Contains("1")|num=="89" select num).ToList();
            foreach (var item in lists)
            {
                Console.WriteLine(item);
            }

新建girl类

        static void Main(string[] args)
        {
            List<girl> list = Default();
            //全部
            List<girl> l = (from girl in list select girl).ToList();
            foreach (var item in l)
            {
                Console.WriteLine(item.id+item.name+item.age+item.text);
            }
            Console.WriteLine("---------------------------------------");
            //精准查询
            //SingleOrDefault()返回集合第一个
            girl g = (from girl in list where girl.id == 1 select girl).SingleOrDefault();
            Console.WriteLine(g.id+g.name);
            Console.WriteLine("---------------------------------------");
            //模糊查询
            var lists = (from girl in list where girl.name.Contains("1") select girl).ToList();
            foreach (var item in lists)
            {
                Console.WriteLine(item.id + item.name + item.age + item.text);
            }
            Console.WriteLine("---------------------------------------");
            //范围
            var newlist = (from girl in list where girl.id>=2&girl.id<=4 select girl).ToList();
            foreach (var item in newlist)
            {
                Console.WriteLine(item.id + item.name + item.age + item.text);
            }
            Console.WriteLine("---------------------------------------");
            //排序
            var newlists = (from girl in list orderby girl.age descending select girl).ToList();
            foreach (var item in newlists)
            {
                Console.WriteLine(item.id + item.name + item.age + item.text);
            }
            Console.WriteLine("---------------------------------------");
            //分组
            var list1 = (from girl in list group girl by girl.age into o select new {age = o.Key,count = o.Count() }).ToList();
            foreach (var item in list1)
            {
                Console.WriteLine(item.age +":"+ item.count);
            }
            Console.WriteLine("---------------------------------------");
            //分页
            int pagenow = 1;//页数
            int pagecount = 2;//每页条数
            int now = (pagenow - 1) * pagecount;//每页初始值
            var list2 = (from girl in list select girl).Skip(now).Take(pagecount).ToList();
            foreach (var item in list2)
            {
                Console.WriteLine(item.id + ":" + item.name);
            }
            Console.WriteLine("---------------------------------------");
        }
        public static List<girl> Default()
        {
            return new List<girl> { 
                new girl(1,"1",1,"1"),
                new girl(2,"2",2,"2"),
                new girl(3,"3",3,"3"),
                new girl(4,"4",4,"4"),
                new girl(5,"5",5,"5")
            };
        }

连表查询
新建一个类

		public static List<boy> Defaultboy()
        {
            return new List<boy> {
                new boy(1,"11",1,"18648"),
                new boy(2,"21",2,"2486"),
                new boy(3,"31",3,"38464"),
                new boy(4,"41",4,"4878"),
                new boy(5,"51",5,"54531587")
            };
        }
        public static List<girl> Defaultgirl()
        {
            return new List<girl> {
                new girl(1,"11",1,"14534"),
                new girl(2,"21",2,"28434"),
                new girl(3,"31",3,"38486"),
                new girl(4,"41",4,"44864"),
                new girl(5,"51",5,"58464")
            };
        }

查询

			List<girl> list1 = Defaultgirl();
            List<boy> list2 = Defaultboy();
            //两表联合查询
            var lists = (from b in list2
                         join g in list1
                         on b.id equals g.id
                         where b.name.Contains("1")
                         orderby b.id descending
                         select new { bname = b.name, gname = g.name, btext = b.text, gtext = g.text }).ToList().Skip(0).Take(2);
            foreach (var item in lists)
            {
                Console.WriteLine(item.bname+"||"+item.gname);
                Console.WriteLine(item.btext + "||" + item.gtext);
            }

-----------------------------------------------------------------------------------------------
聚合函数运算符
count()计数
longcount()大计数
max()最大值
min()最小值
sum()总数
average()平均值

元素操作运算符方法
Elementat()返回集合中指定索引处元素
ElementatorDefault()返回指定处元素,若超范围则返回默认值
First()返回满足条件的第一个元素
FirstOrDefault()返回满足条件的第一个元素,若没有则返回默认值
Last()返回最后一个元素
LastOrDefault()返回最后一个元素,若没有则返回默认值
Single()返回满足条件的唯一元素
SingleOrDefault()返回满足条件的唯一元素,若没有则返回默认值

数据类型转换运算符方法
ToList()将集合转换为list
ToArray()将集合转换为数组
ToDictionary()根据键选择器将元素放到Dictionary中
ToLookup()根据键选择器将元素放到Lookup中
AsEnumerable()将序列转换为Enumerable集合
AsQueryable()将Enumerable转换为Queryable
Cast()将集合元素强转为指定类型
OfType()根据值强制转换为指定类型的能力筛选值

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PROBIE_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值