欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linq中的分組操作符

 更新時(shí)間:2022年03月10日 09:42:49   作者:.NET開(kāi)發(fā)菜鳥(niǎo)  
這篇文章介紹了linq中的分組操作符,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

分組是根據(jù)一個(gè)特定的值將序列中的元素進(jìn)行分組。LINQ只包含一個(gè)分組操作符:GroupBy。GroupBy操作符類(lèi)似于T-SQL語(yǔ)言中的Group By語(yǔ)句。來(lái)看看GroupBy的方法定義:

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, 
IEqualityComparer<TKey> comparer);

從方法定義中可以看出:GroupBy的返回值類(lèi)型是:IEnumerable<IGrouping<TKey, TSource>>。其元素類(lèi)型是IGrouping<TKey, TSource>。TKey屬性代表了分組時(shí)使用的關(guān)鍵值,TSource屬性代表了分組之后的元素集合。遍歷IGrouping<TKey, TSource>元素可以讀取到每一個(gè)TSource類(lèi)型??聪旅娴睦樱?/p>

1、定義Product類(lèi),其定義如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GroupOperation
{
    public class Product
    {
        public int Id { get; set; }
        public int CategoryId { get; set; }
        public string Name { get; set; }
        public double Price { get; set; }
        public DateTime CreateTime { get; set; }
    }
}

2、在Main()方法中調(diào)用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GroupOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Product> listProduct = new List<Product>()
            {
               new Product(){Id=1,CategoryId=1, Name="C#高級(jí)編程第10版", Price=100.67,CreateTime=DateTime.Now},
               new Product(){Id=2,CategoryId=1, Name="Redis開(kāi)發(fā)和運(yùn)維", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},
               new Product(){Id=3,CategoryId=2, Name="活著", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},
               new Product(){Id=4,CategoryId=3, Name="高等數(shù)學(xué)", Price=97,CreateTime=DateTime.Now.AddMonths(-1)},
               new Product(){Id=5,CategoryId=6, Name="國(guó)家寶藏", Price=52.8,CreateTime=DateTime.Now.AddMonths(-1)}
            };

            // 查詢(xún)表達(dá)式
            var listExpress = from p in listProduct group p by p.CategoryId;
            Console.WriteLine("輸出查詢(xún)表達(dá)式結(jié)果");
            foreach (var item in listExpress)
            {
                Console.WriteLine($"CategoryId:{item.Key}");
                foreach(var p in item)
                {
                    Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
                }
            }
            Console.WriteLine("***************************************");
            // 查詢(xún)方法
            var listFun = listProduct.GroupBy(p => p.CategoryId);
            Console.WriteLine("輸出方法語(yǔ)法結(jié)果");
            foreach (var item in listFun)
            {
                Console.WriteLine($"CategoryId:{item.Key}");
                foreach (var p in item)
                {
                    Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
                }
            }
            Console.ReadKey();
        }
    }
}

結(jié)果:

 下面在來(lái)看看多個(gè)分組條件的例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GroupOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Product> listProduct = new List<Product>()
            {
               new Product(){Id=1,CategoryId=1, Name="C#高級(jí)編程第10版", Price=100.67,CreateTime=DateTime.Now},
               new Product(){Id=2,CategoryId=1, Name="Redis開(kāi)發(fā)和運(yùn)維", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},
               new Product(){Id=3,CategoryId=2, Name="活著", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},
               new Product(){Id=4,CategoryId=3, Name="高等數(shù)學(xué)", Price=97,CreateTime=DateTime.Now.AddMonths(-1)},
               new Product(){Id=5,CategoryId=6, Name="國(guó)家寶藏", Price=52.8,CreateTime=DateTime.Now.AddMonths(-1)}
            };

            // 查詢(xún)表達(dá)式
            var list = from p in listProduct group p by new { p.CategoryId, p.Price };
            Console.WriteLine("查詢(xún)表達(dá)式方式1輸出:");
            foreach (var item in list)
            {
                Console.WriteLine("key:" + item.Key);
                foreach (var subItem in item)
                {
                    Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                }
            }
            var listExpress = from p in listProduct
                              group p by new { p.CategoryId, p.Price } into r  // 使用into把數(shù)據(jù)填充到局部變量r中,然后select篩選數(shù)據(jù)
                              select new { key = r.Key, ListGroup = r.ToList() };
            Console.WriteLine("查詢(xún)表達(dá)式方式2輸出:");
            foreach(var item in listExpress)
            {
                Console.WriteLine("key:"+item.key);
                foreach (var subItem in item.ListGroup)
                {
                    Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                }
            }

            // 方法語(yǔ)法
            var listFun = listProduct.GroupBy(p => new { p.CategoryId, p.Price }).Select(g => new { key = g.Key, ListGroup = g.ToList() });
            Console.WriteLine("方法語(yǔ)法輸出:");
            foreach (var item in listFun)
            {
                Console.WriteLine("key:" + item.key);
                foreach (var subItem in item.ListGroup)
                {
                    Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                }
            }

            Console.ReadKey();
        }
    }
}

結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論