1、C# 3或更高版本使用匿名类型
// 声明式查询语法
var result3 =
from x in table
group x by new { x.Column1, x.Column2 } into g
select new { g.Key.Column1, g.Key.Column2, QuantitySum = g.Sum(x => x.Quantity) };
// /或方法的语法
var result4 = table.GroupBy(x => new { x.Column1, x.Column2 })
.Select(g =>
new { g.Key.Column1, g.Key.Column2 , QuantitySum= g.Sum(x => x.Quantity) });
使用示例:
using System;
using System.Collections.Generic;
using System.Linq;
public class Order
{
public string Category { get; set; }
public string Supplier { get; set; }
public int Quantity { get; set; }
}
public class Program
{
public static void Main()
{
// 创建订单数据列表
List<Order> orders = new List<Order>
{
new Order { Category = "Electronics", Supplier = "SupplierA", Quantity = 100 },
new Order { Category = "Electronics", Supplier = "SupplierB", Quantity = 150 },
new Order { Category = "Furniture", Supplier = "SupplierA", Quantity = 200 },
new Order { Category = "Furniture", Supplier = "SupplierB", Quantity = 50 },
new Order { Category = "Electronics", Supplier = "SupplierA", Quantity = 75 }
};
// 使用声明式查询语法进行分组和汇总
var result3 =
from x in orders
group x by new { x.Category, x.Supplier } into g
select new
{
g.Key.Category,
g.Key.Supplier,
QuantitySum = g.Sum(x => x.Quantity)
};
// 输出声明式查询结果
Console.WriteLine("结果 (声明式查询语法):");
foreach (var group in result3)
{
Console.WriteLine($"Category: {group.Category}, Supplier: {group.Supplier}, QuantitySum: {group.QuantitySum}");
}
// 使用方法语法进行分组和汇总
var result4 = orders.GroupBy(x => new { x.Category, x.Supplier })
.Select(g =>
new
{
g.Key.Category,
g.Key.Supplier,
QuantitySum = g.Sum(x => x.Quantity)
});
// 输出方法语法结果
Console.WriteLine("\n结果 (方法语法):");
foreach (var group in result4)
{
Console.WriteLine($"Category: {group.Category}, Supplier: {group.Supplier}, QuantitySum: {group.QuantitySum}");
}
}
}2、C# 7.1或更高版本使用元组和推断的元组元素名
// 声明式查询语法
var result =
from x in table
group x by (x.Column1, x.Column2) into g
select (g.Key.Column1, g.Key.Column2, QuantitySum: g.Sum(x => x.Quantity));
//或方法的语法
var result2 = table.GroupBy(x => (x.Column1, x.Column2))
.Select(g => (g.Key.Column1, g.Key.Column2, QuantitySum: g.Sum(x => x.Quantity)));
使用示例:
using System;
using System.Collections.Generic;
using System.Linq;
public class Order
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public int Quantity { get; set; }
}
public class Program
{
public static void Main()
{
// 创建订单数据列表
List<Order> table = new List<Order>
{
new Order { Column1 = "Electronics", Column2 = "SupplierA", Quantity = 100 },
new Order { Column1 = "Electronics", Column2 = "SupplierB", Quantity = 150 },
new Order { Column1 = "Furniture", Column2 = "SupplierA", Quantity = 200 },
new Order { Column1 = "Furniture", Column2 = "SupplierB", Quantity = 50 },
new Order { Column1 = "Electronics", Column2 = "SupplierA", Quantity = 75 }
};
// 使用声明式查询语法进行分组和汇总
var result =
from x in table
group x by new { x.Column1, x.Column2 } into g
select new { g.Key.Column1, g.Key.Column2, QuantitySum = g.Sum(x => x.Quantity) };
// 输出声明式查询结果
Console.WriteLine("结果 (声明式查询语法):");
foreach (var group in result)
{
Console.WriteLine($"Column1: {group.Column1}, Column2: {group.Column2}, QuantitySum: {group.QuantitySum}");
}
// 使用方法语法进行分组和汇总
var result2 = table
.GroupBy(x => new { x.Column1, x.Column2 })
.Select(g => new { g.Key.Column1, g.Key.Column2, QuantitySum = g.Sum(x => x.Quantity) });
// 输出方法语法结果
Console.WriteLine("\n结果 (方法语法):");
foreach (var group in result2)
{
Console.WriteLine($"Column1: {group.Column1}, Column2: {group.Column2}, QuantitySum: {group.QuantitySum}");
}
}
}