2011-05-28 20 views
1
 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每個項目被輸出兩次 enter image description hereLINQ在DataGrid中輸出兩次數值

+1

我懷疑這可能是Linq的問題。你的代碼中可能有其他問題。什麼是數據類型變量? – Snowbear 2011-05-28 19:21:31

+0

我懷疑你有這樣一個原因,但如果你在第一個查詢中輸入你的訂單,會發生什麼?每個記錄只有一行輸出?我還想知道如果在第二個查詢中刪除'select',會發生什麼。 – 2011-05-28 19:43:07

回答

0

AsEnumerable()看起來可疑;它可能有副作用,導致重複執行兩次。

我承認我不會馬上看到會發生什麼;表面上你會認爲select new Test{...}會強制立即進行評估,隨後的查詢只能對結果進行處理。但是當有人試圖用他們的類型變得聰明的時候,我看到了陌生的東西......

什麼類型是data

0

嘗試重寫等於在你的測試類:

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(); 
     } 
    } 
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) 
           }; 

並檢查結果? 另外它在我看來,你沒有把實際的代碼,你只是示範代碼演示。它可能來自實際的代碼。

等待您的答覆。 此致敬禮。