我正在尝试找到一种有效的方法来为C#中的linq请求中的每个组设置限制(例如,7个项目组)。我不想创建另一个具有一个组的额外组,我只想传递给另一个类别。
目前我正在这样做以填充我的groupsList:
public IEnumerable<object> ListByCategory
{
get
{
var query = from item in listArticles.listArticles
orderby item.categorie
group item by item.categorie into g
select g;
return query;
}
}
之后我试图通过这个groupsList并删除每个类别中的所有额外元素,但它根本不优雅。
提前谢谢
这是Xaml部分:
<local:MyGridView x:Name="PicturesGridView" SelectionMode="None"
ItemsSource="{Binding Source={StaticResource cvs1}}" IsItemClickEnabled="True" ItemTemplate="{StaticResource CustomTileItem}" ItemClick="ItemView_ItemClick" >
<local:MyGridView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</local:MyGridView.ItemsPanel>
<local:MyGridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Button Click="Button_Click_1" Content="{Binding Key}" Foreground="Black" Background="White" FontSize="30" Margin="0,0,0,-10" ></Button>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid ItemWidth="75" ItemHeight="150" Orientation="Vertical" Margin="0,0,80,0" MaximumRowsOrColumns="3"/>
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</local:MyGridView.GroupStyle>
</local:MyGridView>
以下是资源:
<DataTemplate x:Key="CustomTileItem">
<Grid >
<Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image Source="{Binding imageUrl}" Stretch="UniformToFill"/>
</Border>
<StackPanel VerticalAlignment="Bottom" >
<TextBlock Text="{Binding title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextStyle}" Height="30" Margin="15,0,15,0"/>
<TextBlock Text="{Binding chapo}" Foreground="{StaticResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</Grid>
</DataTemplate>
<CollectionViewSource x:Name="cvs1"
IsSourceGrouped="True" />
我正在做这样的绑定:
IEnumerable<object> myObject = App.api.ListByCategory;
this.cvs1.Source = App.api.ListByCategory;
答案 0 :(得分:2)
如果我理解您的请求,您可以使用Take
:
return from item in listArticles.listArticles
orderby item.categorie
group item by item.categorie into g
select g.Take(7);
(显然可以是一个变量......)
请注意,这将失去这是一个分组的事实,因此您将无法再从每个组中获取密钥。如果这是一个问题,您可以轻松地选择新的数据结构。例如:
return from item in listArticles.listArticles
orderby item.categorie
group item by item.categorie into g
select new { g.Key, Values = g.Take(7) };