设计素材网站图案免费低价建设网站
news/
2025/9/30 11:30:22/
文章来源:
设计素材网站图案免费,低价建设网站,怎样对一个网站做seo,织梦模板修改网站颜色【.NET Core】Linq查询运算符#xff08;二#xff09; 文章目录 【.NET Core】Linq查询运算符#xff08;二#xff09;一、概述二、生成运算2.1 DefaultIfEmpty2.2 Empty2.3 Range2.4 Repeat 三、相等运算3.1 SequenceEqual 四、元素运算4.1 ElementAt4.2 ElementAtOrDef…【.NET Core】Linq查询运算符二 文章目录 【.NET Core】Linq查询运算符二一、概述二、生成运算2.1 DefaultIfEmpty2.2 Empty2.3 Range2.4 Repeat 三、相等运算3.1 SequenceEqual 四、元素运算4.1 ElementAt4.2 ElementAtOrDefault4.1 First4.2 FirstOrDefault4.3 Last4.4 LastOrDefault4.5 Single4.6 SingleOrDefault 五、转换数据类型5.1 AsEnumerable5.2 AsQueryable5.3 AsEnumerable和AsQueryable5.4 Cast5.5 OfType5.6 ToArray5.7 ToDictionary5.8 ToList5.9 ToLookup 一、概述
查询运算符是组成Linq模式的方法。这些方法中的大多数都作用于序列其中序列指其类型实现IEnumberableT接口或IQueryableT接口的对象。标准查询运算符提供包括筛选、投影、集合、排序等查询功能。
查询运算符包含两组一组作用于类型IEnumberableT的对象另一组作用于类型IQueryableT的对象。
《Linq查询运算符一》详细介绍了筛选数据、投影运算、设置运算 、数据排序、限定符运算及数据分区本章将继续介绍。
二、生成运算
2.1 DefaultIfEmpty
返回指定序列的元素如果序列为空则返回单一实例集合中的类型参数的默认值。
IListint list new Listint();
var lst list.DefaultIfEmpty();
foreach (var item in lst)
{Console.WriteLine(item);
}输出结果
02.2 Empty
初始化一个Empty空集合
var listnew List() 等于 var list Enumerable.Empty();
var lst Enumerable.Emptyint();
foreach (var item in lst)
{Console.WriteLine(item);
}2.3 Range
Range()方法返回IEnumerable类型的集合该集合具有指定数量的元素和从第一个元素开始的顺序值。
var lst Enumerable.Range(5, 2);
foreach (var item in lst)
{Console.WriteLine(item);
}执行结果
5
62.4 Repeat
Repeat()方法使用指定数量的元素生成IEnumerable类型的集合每个元素包含相同的指定值。
var lst Enumerable.Repeatdouble(5, 2)
foreach (var item in lst)
{Console.WriteLine(item);
}执行结果
5
5三、相等运算
3.1 SequenceEqual
两个序列其相应元素相等且具有被视为相等的相同数量的元素
public class Person
{public int Id { get; set; }public string Code { get; set; }public string Name { get; set; }
}
IListint listA new Listint() { 1, 2, 3, 4 };
IListint listB new Listint() { 1, 2, 3, 4 };
IListint listC new Listint() { 2, 1, 3, 4 };
bool falg Enumerable.SequenceEqual(listA, listB);
Console.WriteLine(falg);
bool falgC Enumerable.SequenceEqual(listA, listC);
Console.WriteLine(falgC);IListPerson peopleA new ListPerson() {new Person { Id 2, Code 002, Name CAZ },new Person { Id 2, Code 002, Name CAZ },
};IListPerson peopleB new ListPerson() {new Person { Id 2, Code 002, Name CAZ },new Person { Id 2, Code 002, Name CAZ },
};
bool flagPersonA Enumerable.SequenceEqualPerson(peopleA, peopleB);
Console.WriteLine(flagPersonA);
bool flagPersonB Enumerable.SequenceEqualPerson(peopleA, peopleB, new StudentComparer());
Console.WriteLine(flagPersonB);/// summary
/// 重写比较接口
/// /summary
public class StudentComparer : IEqualityComparerPerson
{public bool Equals(Person? x, Person? y){if (x.Id y.Id x.Code.ToLower() y.Code.ToLower())return true;return false;}public int GetHashCode([DisallowNull] Person obj){return obj.GetHashCode();}
}
四、元素运算
元素运算从序列中返回唯一特定的元素。
4.1 ElementAt
返回集合中指定索引处的元素。
IListPerson peopleA new ListPerson() {new Person { Id 1, Code 001, Name 任峻 },new Person { Id 2, Code 002, Name 陈矫 },new Person { Id 3, Code 003, Name 丁仪 },new Person { Id 4, Code 004, Name 司马朗 },new Person { Id 5, Code 005, Name 夏侯渊 },
};
Person person peopleA.ElementAt(4);
Console.WriteLine($Id{person.Id},Code{person.Code},Name{person.Name});执行结果
Id5,Code005,Name夏侯渊4.2 ElementAtOrDefault
返回集合中指定索引处的元素如果索引超出范围则返回默认值。
IListPerson peopleA new ListPerson() {new Person { Id 1, Code 001, Name 任峻 },new Person { Id 2, Code 002, Name 陈矫 },new Person { Id 3, Code 003, Name 丁仪 },new Person { Id 4, Code 004, Name 司马朗 },new Person { Id 5, Code 005, Name 夏侯渊 },
};
Person person peopleA.ElementAtOrDefaultPerson(5);
Console.WriteLine($Id{person?.Id},Code{person?.Code},Name{person?.Name});执行结果
Id,Code,Name4.1 First
返回集合的第一个元素或满足条件的第一个元素。
IListPerson peopleA new ListPerson() {new Person { Id 1, Code 001, Name 任峻 },new Person { Id 2, Code 002, Name 陈矫 },new Person { Id 3, Code 003, Name 丁仪 },new Person { Id 4, Code 004, Name 司马朗 },new Person { Id 5, Code 005, Name 夏侯渊 },
};
Person person peopleA.First();
Console.WriteLine($Id{person?.Id},Code{person?.Code},Name{person?.Name});执行结果
Id1,Code001,Name任峻4.2 FirstOrDefault
int[] numbers new int[] { 1, 2, 3, 5, 7, 11 };
var nums numbers.FirstOrDefaultint(ee1);
Console.WriteLine(${ nums});执行结果
04.3 Last
返回集合的最后一个元素或满足条件的最后一个元素。
int[] numbers new int[] { 1, 2, 3, 5, 7, 11 };
var nums numbers.Last(ee5);
Console.WriteLine(${ nums});执行结果
34.4 LastOrDefault
返回集合的最后一个元素或满足条件的最后一个元素。 如果此类元素不存在则返回默认值。
int[] numbers new int[] { 1, 2, 3, 5, 7, 11 };
var nums numbers.LastOrDefault(ee11);
Console.WriteLine(${ nums});执行结果
04.5 Single
返回集合的唯一一个元素或满足条件的唯一一个元素。如果没有要返回的元素或要返回多个元素则引发InvalidOperationException。
int[] numbers new int[] { 100};
int result numbers.Single();
Console.WriteLine(result);执行结果
1004.6 SingleOrDefault
返回集合的唯一一个元素或满足条件的唯一一个元素。如果没有要返回的元素或要返回多个元素则引发InvalidOperationException。
int[] numbers new int[] { 100};
int result numbers.SingleOrDefault();
Console.WriteLine(result);执行结果
100五、转换数据类型
转换数据类型可以通过转换方法更改输入对象的类型。名称以“As”开头的转换方法可更改源集合的静态类型但不枚举延迟加载此源集合。名称以“To”开头的方法可枚举即时加载源集合并将项放入相应的集合类型。
5.1 AsEnumerable
所有实现了IEnumerable接口的类型都可以调用此方法来获取一个IEnumerable集合。此方法一般仅用于实现类中的方法与IEnumerable接口方法重名时。
var products db.Product.AsEnumerable().Select(p new {p.Id, p.Name, p.CreateTime.Date});在迭代时遇见AsEnumerable()会先进行Sql查询对已查出来的结果当然能进行Linq to object操作。
5.2 AsQueryable
AsQueryable将一个序列向下转换 一个IQueryable,它生成了一个本地查询的IQueryable包装。IQueryable实现了IEnumerable接口。但IEnumerable换成IQueryable后速度提高很多。
var query (from item in context.Users.AsQueryable() where item.id 10select item.id).ToList();5.3 AsEnumerable和AsQueryable
AsEnumerable()是延迟执行的实际上什么都没有发生当真正使用对象的时候例如调用First, Single, ToList…的时候才执行。AsEnumerable将一个序列向上转换为一个IEnumerable, 强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。AsQueryable将一个序列向下转换为一个IQueryable, 它生成了一个本地查询的IQueryable包装。AsEnumerable()延迟执行不会立即执行。当你调用.AsEnumerable()的时候实际上什么都没有发生。ToList()立即执行。当你需要操作结果的时候用.ToList()否则如果仅仅是用来查询不需要进一步使用结果集并可以延迟执行就用.AsEnumerable()/IEnumerable /IQueryable。AsEnumerable()虽然延迟执行但还是访问数据库而.ToList()直接取得结果放在内存中。比如我们需要显示两个部门的员工时部门可以先取出放置在List中然后再依次取出各个部门的员工这时访问的效率要高一些因为不需要每次都访问数据库去取出部门。IQueryable实现了IEnumberable接口。但IEnumerable 换成IQueryable后速度提高很多。IEnumerable跑的是Linq to Object强制从数据库中读取所有数据到内存先。
5.4 Cast
将集合中的元素转换为指定类型。
DataRow rowdt.Rows.CastDataRow().Single();5.5 OfType
根据其转换为指定类型的能力筛选值。
Listobject objList new Listobject {new { ID 1, Name 阿里 },new { ID 2, Name 百度 },new Person() { Id1, Name 马云, Code001 }
};
var p objList.OfTypePerson().ToList();
foreach (var item in p)
{Console.WriteLine(item.Name);
}5.6 ToArray
将结合转换为数组。此方法强制执行查询。
IListstring list new Liststring() { A, B, C };
string[] arr list.ToArray();5.7 ToDictionary
根据键选择器函数将元素放入DictionaryTKey,TValue。此方法强制执行查询。
Person[] parameters new Person[]
{new Person() { Id 1, Code 052, Name 正一郎 },new Person() { Id 2, Code 028, Name 清次郎 },new Person() { Id 3, Code 020, Name 誠三郎 },new Person() { Id 4, Code 018, Name 征史郎 },
};
Dictionaryint, Person dictionary parameters.ToDictionary(value value.Id);5.8 ToList
将集合转换为ListT。此方法强制执行查询。
string[] strArr { 1,2, 3 };
IListstring strList strArr.ToList();5.9 ToLookup
根据键选择器函数将元素放入LookupTKey,TElement一对多字典。此方法强制执行查询。该ToLookup()是不可改变一旦创建一个Lookup,不能添加或删除元素。
IListPerson values new ListPerson()
{new Person { Id1,Name0001},new Person { Id2,Name0002},new Person{ Id3,Name0003},new Person{ Id4,Name0004},
};
var list values.ToLookup(e e.Id);
foreach (var item in list)
{Console.WriteLine(item.Key);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922772.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!