LINQ在DataGrid中输出两次值

时间:2011-05-28 19:06:17

标签: c# linq datagrid

        var query = from r in data.AsEnumerable()
                    select new Test
                               {
                                   Name = r.Field<string>(0),
                                   DateReported = r.Field<DateTime>(2)
                               };

        var newQuery = from i in query
                       orderby i.Name, i.DateReported
                       select i;

        myData.DataContext = newQuery;

所以问题是,我正在阅读Excel工作表并迭代值。如果我使用查询将DataContext绑定到DataGrid,那么一切正常。但是当我将它绑定到newQuery时,每个Item都会输出两次 enter image description here

3 个答案:

答案 0 :(得分:0)

AsEnumerable()看起来很可疑;它可能有副作用,当它被执行两次时会导致重复。

我承认我不会立即看到会发生什么;从表面上看,您会认为select new Test{...}会强制立即进行评估,后续查询只会对结果起作用。但是当有人试图让他们的类型变得聪明时,我看到了一些奇怪的事情......

data是什么类型的?

答案 1 :(得分:0)

尝试在Test类中覆盖Equal:

    public class Test
    {
      public string Name { get; set; }
      public DateTime DateReported { get; set; }


      public override bool Equals(object obj)
      {
        Test test = obj as Test;
        if (test == null )
          return false;

        return string.Equals(this.Name, test.Name) && this.DateReported == test.DateReported; 
      }

      public override int GetHashCode()
      {
        return Name.GetHashCode() ^ DateReported.GetHashCode();
      }
    }

答案 2 :(得分:0)

你直接试过这个吗?

var query = from r in data.AsEnumerable()
    orderby r.Field<string>(0), r.Field<DateTime>(2)
                    select new Test
                               {
                                   Name = r.Field<string>(0),
                                   DateReported = r.Field<DateTime>(2)
                               };

并检查结果? 另外在我看来你没有把实际的代码,你只是用示例代码演示。它可能来自实际代码。

等待你的回复。 问候。