在C#中,LINQ(Language Integrated Query)提供了一种声明式的编程方式,可以用来对数据进行查询、筛选、排序等操作。当你想要拼接(即连接)两个序列时,LINQ提供了几种方法,最常用的是Concat
和Union
。
Concat
方法用于将两个序列拼接成一个序列,保留原始序列中的所有元素,包括重复元素。如果第一个序列中有重复的元素,或者第二个序列中有元素与第一个序列中的元素相同,这些元素在结果序列中都会被保留。
基础类
C#class Hero
{
public int HeroNo { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public int Age { get; set; }
public Hero(string name, int age, int heroNo, string country)
{
Name = name;
Age = age;
HeroNo = heroNo;
Country = country;
}
}
class Army
{
public int HeroNo { get; set; }
public int ArmyNo { get; set; }
public int Qty { get; set; }
public string TeamLeader { get; set; }
}
调用
C#private void btnSearch_Click(object sender, EventArgs e)
{
List<Hero> heroes = new List<Hero>
{
new Hero("张飞",38,100,"蜀"),
new Hero("刘备",40,101,"蜀"),
new Hero("关羽",39,102,"蜀"),
new Hero("曹操",45,103,"魏"),
new Hero("孙权",31,104,"吴"),
new Hero("黄忠",45,105,"蜀"),
new Hero("夏侯惇",45,106,"魏")
};
List<Army> armies = new List<Army>
{
new Army(){ArmyNo=1,HeroNo=100,Qty=10000,TeamLeader="A1"},
new Army(){ArmyNo=2,HeroNo=100,Qty=30000,TeamLeader="A2"},
new Army(){ArmyNo=3,HeroNo=101,Qty=40000,TeamLeader="A3"},
new Army(){ArmyNo=4,HeroNo=102,Qty=45000,TeamLeader="A4"},
new Army(){ArmyNo=5,HeroNo=103,Qty=18000,TeamLeader="A5"},
new Army(){ArmyNo=6,HeroNo=103,Qty=80000,TeamLeader="A6"},
};
var ret = heroes.Select(x => x.Name).Concat(armies.Select(x => x.TeamLeader));
foreach (var item in ret)
{
lstMain.Items.Add(item);
}
}
注意:连接的数据类型一定一致
与Concat
不同,Union
方法用于返回两个序列的并集,这意味着它会移除重复的元素。如果两个序列中有重复的元素,这些元素在结果序列中只会出现一次。
C#using System;
using System.Linq;
class Program
{
static void Main()
{
int[] first = { 1, 2, 3 };
int[] second = { 3, 4, 5 };
var unioned = first.Union(second);
foreach(var element in unioned)
{
Console.WriteLine(element);
}
}
}
Concat
来拼接两个序列,如果你希望保留所有元素,包括重复的元素。Union
来合并两个序列,如果你希望移除重复的元素,只保留唯一的元素。选择哪种方法取决于你的具体需求,是否需要保留序列中的重复元素。
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!