c#2个泛型集合找到某字段重复项,怎么做,谢谢

c#2个泛型集合找到某字段重复项,怎么做,谢谢

问题描述:

2个泛型集合
List st=new List();
包含3个字段 姓名 班级 成绩
如:
凯特琳 女 90
崔斯特 男 85
嘉文 男 80
维恩 女 95
韦鲁斯 男 80

List pl=new List();
包含3个字段 姓名 项目 年龄
如:
凯特琳 射击 25
维恩 跳高 24

我怎样找到这2个集合的都存在的项,谢谢

不好意思,应该是Join operator -_-||
例子如下:

class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }

    public Person(string name, string gender, int age)
    {
        Name = name;
        Gender = gender;
        Age = age;
    }
}

class ScoreCard
{
    public string Name { get; set; }
    public string Sports { get; set; }
    public int Score { get; set; }

    public ScoreCard(string name, string sports, int score)
    {
        Name = name;
        Sports = sports;
        Score = score;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var persons = new List<Person>
        {
            new Person("凯特琳", "女", 90),
            new Person("崔斯特", "男", 85),
            new Person("嘉文", "男", 80),
            new Person("维恩", "女", 95),
            new Person("韦鲁斯", "男", 80)
        };

        var scoreCards = new List<ScoreCard>
        {
            new ScoreCard("凯特琳", "射击", 25),
            new ScoreCard("维恩", "跳高", 24)
        };

        var query = persons.Join(scoreCards,
            p => p.Name,
            sc => sc.Name,
            (p, sc) => new { p.Name, p.Gender, p.Age, sc.Sports, sc.Score });

        foreach (var item in query)
        {
            Console.WriteLine("{0} {1} {2} {3} {4}",
                item.Name, item.Gender, item.Age, item.Sports, item.Score);
        }

    }
}

    ==========================

    输出如下:
    凯特琳 女 90 射击 25
    维恩 女 95 跳高 24

不知是不是即使你现在遇到的问题?

我知道用循环遍历可以,但是运算量有点大啊,10条数据就得运算100次,有没有好点的方法

你想要的功能就是LINQ中Intersect Operator。
可以反编译MS怎么实现Intersect的。

private bool MoveNext()
{
try
{
int num = this.<>1__state;
if (num == 0)
{
this.<>1__state = -1;
this.5__1 = new Set(this.comparer);
foreach (TSource local in this.second)
{
this.5__1.Add(local);
}
this.<>7__wrap1 = this.first.GetEnumerator();
this.<>1__state = -3;
while (this.<>7__wrap1.MoveNext())
{
TSource current = this.<>7__wrap1.Current;
if (!this.5__1.Remove(current))
{
continue;
}
this.<>2__current = current;
this.<>1__state = 1;
return true;
Label_00B0:
this.<>1__state = -3;
}
this.<>m__Finally1();
this.<>7__wrap1 = null;
return false;
}
if (num != 1)
{
return false;
}
goto Label_00B0;
}