2013-05-06 61 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

获取或设置一个路径的值在源对象上以用作对象的 视觉表示。