1. 程式人生 > 其它 >NET 6 中新增的LINQ 方法

NET 6 中新增的LINQ 方法

.NET 6 中添加了許多 LINQ 方法。 下表中列出的大多數新方法在 System.Linq.Queryable 型別中具有等效方法。

歡迎關注

如果你刻意練習某件事情請超過10000小時,那麼你就會達到世界級別

TryGetNonEnumeratedCount 嘗試在不強制列舉的情況下確定序列中的元素數。

  List<object> numbers1 = new List<object>() { 5, 4, "nihao" };
  int num = 0;
  numbers1.TryGetNonEnumeratedCount(out num);

num輸出為3

Chunk 將序列的元素拆分為指定大小的區塊

            var list = new List<dynamic>
            {
               new { Id = 1, Property = "value1" },
               new { Id = 2, Property = "value2" },
               new { Id = 3, Property = "value1" }
            };

            var a = list.Chunk(2);

返回 兩個元素,第一個list長度為2,第二個為1

ElementAt方法 返回元素指定索引或者結束的索引

var list = new List<dynamic>
            {
               new { Id = 1, Property = "value1" },
               new { Id = 2, Property = "value2" },
               new { Id = 3, Property = "value1" },
               new { Id = 4, Property = "value4" },
               new { Id = 5, Property = "value2" },
               new { Id = 6, Property = "value6" },
               new { Id = 7, Property = "value7" },
               new { Id = 8, Property = "value8" },
               new { Id = 9, Property = "value9" }

            };
var  b=list.ElementAt(2);
            var  a=list.ElementAt(^2);

a返回的是id=8的item
b返回的是id=9的item

MaxBy 和 MinBy 返回元素中最大值或最小值

  • MaxBy 返回元素中的最大元素
  • MinBy 返回元素中的最小元素
List<int> numbers1 = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 12, 10 };
  var maxnum= numbers1.MaxBy(x => x);
  var mixnum= numbers1.MinBy(x => x);

maxnum輸出為12,minnum為1

DistinctBy 根據某元素去重

  • (相當於以前的自定義方法)
            var list = new List<dynamic>
            {
               new { Id = 1, Property = "value1" },
               new { Id = 2, Property = "value2" },
               new { Id = 3, Property = "value1" }
            };

            // returns objects with Id = 1, 2, but not 3
            var distinctList = list.DistinctBy(x => x.Property).ToList();

返回id為1和2的
就相當於自定義擴充套件方法

public static IEnumerable<t> DistinctBy<t>(this IEnumerable<t> list, Func<t, object> propertySelector)
{
   return list.GroupBy(propertySelector).Select(x => x.First());

ExceptBy返回 兩個序列的元素的集合差值的序列

IntersectBy 返回兩個序列元素 得交際

UnionBy 連線不同集合,過濾某元素相同項

FirstOrDefault返回序列中滿足條件的第一個元素;如果未找到這樣的元素,則返回預設值

LastOrDefault 返回序列中的最後一個元素;如果未找到該元素,則返回預設值

SingleOrDefault 返回序列中的唯一元素;如果該序列為空,則返回預設值;如果該序列包含多個元素,此方法將引發異常。

Take 從序列的開頭返回指定數量的相鄰元素

int[] grades = { 59, 82, 70, 56, 92, 98, 85 };

IEnumerable<int> topThreeGrades =
    grades.OrderByDescending(grade => grade).Take(3);

Console.WriteLine("The top three grades are:");
foreach (int grade in topThreeGrades)
{
    Console.WriteLine(grade);
}
/*
 This code produces the following output:

 The top three grades are:
 98
 92
 85
*/

Zip將指定函式應用於兩個序列的對應元素,以生成結果序列

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

foreach (var item in numbersAndWords)
    Console.WriteLine(item);

// This code produces the following output:

// 1 one
// 2 two
// 3 three