2013-05-08 47 views
2

我有一個嵌套的linqsql用於填充treeview的查詢。當綁定到treeview時,第一個選擇(Title字段)正確顯示所有Titles,但是如果有多個出現,我希望它顯示一次。我該如何解決這個問題?Linq查詢和預期結果 - 不同字段

我試圖

   }).Distinct().OrderBy(c => c.LineNumber) 

}).Distinct(); 

完整的查詢

var results = 
    (from d in mContext.Docs 
    orderby d.Title ascending 
    join b in mContext.Base on d.DocId equals b.DocId 
    join h in mContext.ViewDocItems on b.BaseId equals h.BaseId 
    where h.ItemId == mGuid 
    select new 
    { 
     Id = d.DocId, 
     Title = d.Title, 
     ClassId = d.ClassId, 
     BaseHis = 
      (from c in d.Base 

      select new BaseHistory() 
      { 
       BaseId = c.BaseId, 
       Name = c.Title, 
       BaseFinal = c.Final.Value, 
       LineNumber = c.LineNumber.Value 
       ItemId = h.ItemId 
      }).Distinct().OrderBy(c => c.LineNumber) 
    }); 

foreach(var r in results) 
{ 
    var hist = new DocHistory() 
    { 
     Id = r.Id, 
     Title = r.Title, 
     ClassId = r.ClassId; 
    }; 
    foreach(var h in r.BaseHis) 
    { 
     hist.BaseHis.Add(h); 
    } 

    mHistory.Add(hist); 
} 
+1

你說你嘗試過什麼,而不是發生了什麼事。 – 2013-05-08 18:51:00

+0

添加第二個distinct()後沒有任何更改。結果是一樣的。標題顯示正確,我只想顯示每個標題之一,即使有多個相同標題的出現。 – KeyboardFriendly 2013-05-08 18:56:56

+0

謝謝喬恩,我更新了我的評論 – KeyboardFriendly 2013-05-08 19:27:29

回答

4

通過

.GroupBy(x => x.Name).Select(x => x.FirstOrDefault()) 

更換Distinct()這意味着你做一組上Name(即Title),然後拿第一每個組的元素。

鮮明不起作用,因爲,轉換爲SQL它篩選出具有唯一值的所有記錄每個BaseIdTitle