2013-05-06 34 views
0

我有一個查詢返回基於條件的計數如何避免LINQ排序依據的成員分配/ GROUPBY

var query = (from a in this.db.Servers  
where (a.Date >= fromDP.SelectedDate.Value && a.Date <= toDP.SelectedDate.Value) 
group a by EntityFunctions.TruncateTime(a.Date) into p 
select new { b = p.Count()}).OrderBy(x=> x.b);        

編輯

當綁定到一個ListBox的的ItemSource這樣,

dummy.ItemsSource = query.ToList(); 

XAML

<ListBox x:Name="dummy" ItemsSource="{Binding}" /> 

,其顯示這樣

enter image description here

輸出如何避免構件分配「b」的和在這裏只顯示了整數值?是否有可能

+0

什麼顯示輸出?您的代碼段中沒有任何內容顯示輸出... – 2013-05-06 09:45:48

+0

這本身並不輸出任何內容。你在談論調試視圖嗎? – antonijn 2013-05-06 09:45:48

+0

對不起,我現在要編輯這個問題 – user1221765 2013-05-06 09:46:22

回答

3

只是想你應該避免在這裏使用匿名類型選擇計數直接:

var query = (from a in this.db.Servers  
      where (a.Date >= fromDP.SelectedDate.Value 
          && a.Date <= toDP.SelectedDate.Value) 
      group a by EntityFunctions.TruncateTime(a.Date) into p 
      select p.Count()).OrderBy(x => x); 
+1

+1似乎應該修復它。 – 2013-05-06 09:50:05

+1

是的,這對我有用..謝謝@Cuong Le – user1221765 2013-05-06 09:51:03

3

你看到,在調試器(我猜)。由於您在select中選擇了Anonymous typenew,因此b是保存該值的屬性的名稱。

可以打印這些值,如:

foreach(var item in query) 
    Console.WriteLine(item.b); 

與上面的代碼,你將只能得到的值。

編輯:由於現在的問題已經被編輯過的ListBox,

不要投影到匿名類型。簡單select p.Count,使您的查詢將是:

var query = (from a in this.db.Servers  
where (a.Date >= fromDP.SelectedDate.Value && a.Date <= toDP.SelectedDate.Value) 
group a by EntityFunctions.TruncateTime(a.Date) into p 
select p.Count()).OrderBy(x=> x); //Remove new and b 
+2

我認爲這不值得讚賞。這只是一個猜測,但我懷疑這正是OP所看到的。 – ken2k 2013-05-06 09:47:52

+0

我是sry先生,我忘了提Listbox的ItemsSource。如何在列表框中實現這一點 – user1221765 2013-05-06 09:48:41

+0

我同意ken2k。不值得讚賞。(@ user1221765 Ken2k正在討論downvote這個答案收到,而不是你的問題) – 2013-05-06 09:48:54

1

以上所有的解決方案是正確的,但我們可以設置DisplayMemberPath並輕鬆實現你想要的功能

dummy.ItemsSource = query.ToList(); 
dummy.DisplayMemberPath = "b"; 

DisplayMemberPath

獲取或設置一個路徑的值在源對象上以用作對象的 視覺表示。