1

C#のlinqリクエストで各グループに制限を設定する効率的な方法を見つけようとしています(たとえば、グループごとに7アイテム)。別のカテゴリに渡したいだけのグループを追加して、別のグループを作成したくありません。

とりあえず、 groupedList を埋めるためにこれをやっています:

    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;
        }
    }

後でこの groupedList を調べて、各カテゴリの余分な要素をすべて削除しようとしましたが、まったくエレガントではありません。

前もって感謝します


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;
4

1 に答える 1

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) };
于 2012-08-08T11:16:56.757 に答える