none
关于Linq 和List<>的的一个问题 RRS feed

答案

  •  class Test
        {
            public int i;

            public string str;

        }
        class MyCompare : IEqualityComparer<Test> {

            #region IEqualityComparer<Test> Members

            public bool Equals(Test x, Test y)
            {
                return x.i==y.i&&x.str==y.str;
            }

            public int GetHashCode(Test obj)
            {
                return 1;
            }

            #endregion
        }

    Test t1=new Test();t1.i=1;t1.str="abc";
    Test t2=new Test();   t2.i=1;t2.str="abc";
    Test t3=new Test();   t3.i=2;t3.str="def";
    Test t4=new Test();   t4.i=2;t4.str="def";
    Test t5 = new Test(); t5.i = 3; t5.str = "ghi";

    List<Test> list=new List<Test>();

    list.Add(t1);
    list.Add(t2);
    list.Add(t3);
    list.Add(t4);
    list.Add(t5);

    var c=list.Distinct(new MyCompare()).ToList();


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. Welcome to the All-In-One Code Framework http://cfx.codeplex.com/! If you have any feedback, please tell us.
    • 已标记为答案 天驰 2009年10月29日 7:36
    2009年10月29日 3:56
    版主

全部回复

  • 是可以的
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://blog.tanging.net
    2009年10月23日 5:07
    版主
  • 那么我现在定义一个类
    class Test
    {
         public int i;

        public string str;

    }

    Test t1=new Test();   t1.i=1,t1.str="abc";
    Test t2=new Test();   t2.i=1,t2.str="abc";
    Test t3=new Test();   t3.i=2,t3.str="def";
    Test t4=new Test();   t4.i=2,t4.str="def";
    Test t5=new Test();   t5.i=3,t5.str="ghi";

    List<Test> list=new List<Test>();

    list.add(t1);
    list.add(t2);
    list.add(t3);
    list.add(t4);
    list.add(t5);


    现在要求用Linq来做,
    得到另外一个List<Test>集合,
    里面的项一个才3个,清楚list里i,str相等的项目
    类似与SQL 语句里的 Group by i,str

    我现在用LinQ搞半天没搞出来

    有的话请帮忙附加代码谢谢

    2009年10月23日 8:05
  • var t = list.GroupBy(e => e.i);

    foreach (var tt in t)
    {
        Console.Write(tt.Key+";");
        foreach (Test ts in tt)
        {
            Console.Write(ts.i.ToString(), ts.str+"\n");
        }
    }
    你的需求没说清楚

    2009年10月23日 8:30
  • id和name名相同的只取一项

    类似与SQL里面的Group by

    2009年10月24日 14:25
  • var ts = list.Distinct();
    foreach (var t in ts)
    {
        Console.Write(t.i.ToString() + ";" + t.str);
    }
    2009年10月24日 17:51
  • 尝试下

    2009年10月26日 0:28
  •  class Test
        {
            public int i;

            public string str;

        }
        class MyCompare : IEqualityComparer<Test> {

            #region IEqualityComparer<Test> Members

            public bool Equals(Test x, Test y)
            {
                return x.i==y.i&&x.str==y.str;
            }

            public int GetHashCode(Test obj)
            {
                return 1;
            }

            #endregion
        }

    Test t1=new Test();t1.i=1;t1.str="abc";
    Test t2=new Test();   t2.i=1;t2.str="abc";
    Test t3=new Test();   t3.i=2;t3.str="def";
    Test t4=new Test();   t4.i=2;t4.str="def";
    Test t5 = new Test(); t5.i = 3; t5.str = "ghi";

    List<Test> list=new List<Test>();

    list.Add(t1);
    list.Add(t2);
    list.Add(t3);
    list.Add(t4);
    list.Add(t5);

    var c=list.Distinct(new MyCompare()).ToList();


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. Welcome to the All-In-One Code Framework http://cfx.codeplex.com/! If you have any feedback, please tell us.
    • 已标记为答案 天驰 2009年10月29日 7:36
    2009年10月29日 3:56
    版主
  • 自己封顶
    2009年11月6日 6:51