假設你能夠使用LINQ,那麼你可以很容易地在C#中完成所有的分組和排序。 (我假設只是一個DateTime對象列表而不是完整的Show對象 - 看起來你可以用一個簡單的LINQ Select語句獲得每個Show的DateTime。)
var shows = new[]
{
new DateTime(2010, 7, 28, 11, 15, 0),
new DateTime(2010, 7, 29, 8, 50, 0),
new DateTime(2010, 7, 29, 8, 55, 0)
};
var dates = shows.GroupBy(d => d.Date).OrderBy(d => d.Key);
foreach (var date in dates)
{
Console.WriteLine("Date {0}", date.Key.ToShortDateString());
var hours = date.GroupBy(d => d.Hour).OrderBy(d => d.Key);
Console.WriteLine("\tHours\tCount");
foreach (var hour in hours)
Console.WriteLine("\t{0}-{1}\t{2}", hour.Key, (hour.Key+1)%24, hour.Count());
}
這提供了輸出:
Date 7/28/2010
Hours Count
11-12 1
Date 7/29/2010
Hours Count
8-9 2
注意,這只是一個簡單的控制檯應用程序的例子。您尚未指定您使用的是什麼GUI技術(WinForms,WPF),因此我將其留作練習,以便將分組結果應用到GUI中。
編輯:這是XAML中使用嵌套的ItemsControls和DataBinding轉換爲LINQ語句的示例格式。
<ItemsControl Name="ShowDates" ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<HeaderedContentControl HeaderStringFormat="Date: {0}">
<HeaderedContentControl.Header>
<StackPanel>
<TextBlock Text="{Binding Path=DateString, StringFormat='Date: {0}'}" />
<TextBlock Margin="20,1,1,1" Text="Hour : Shows"/>
</StackPanel>
</HeaderedContentControl.Header>
<ItemsControl Name="HoursList" Margin="20,1,1,1" ItemsSource="{Binding Path=Hours}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}-{1} : {2}">
<MultiBinding.Bindings>
<Binding Path="HourStart" />
<Binding Path="HourEnd" />
<Binding Path="Count" />
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</HeaderedContentControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
這使用我的原始LINQ語句的修改版本,以使DataBinding更容易連線。這段代碼在我的測試窗口的構造函數中。
var result =
shows
.GroupBy(d => d.Date)
.Select(gp => new{
Date = gp.Key,
DateString = gp.Key.ToShortDateString(),
Hours = gp.GroupBy(d => d.Hour)
.Select(hgp => new {
HourStart = hgp.Key,
HourEnd = (hgp.Key + 1) % 24,
Count = hgp.Count()
})
.OrderBy(h => h.HourStart)
});
ShowDates.DataContext = result;
什麼數據庫?你在使用LINQ產品還是數據集? – 2010-08-31 16:22:18
這是更多的SQL問題或LINQ問題,而不是C#問題。根據Brian的評論,您使用的是什麼類型的數據訪問? – 2010-08-31 16:31:00
對於我來說,這不是一個SQL問題,因爲應用程序使用NHibernate獲取數據,而這些數據都是由其他人設計的。所以我可以做的是獲取數據,然後使用C#以需要的方式顯示和分解它。 – developer 2010-08-31 17:04:58