2012-08-08 32 views
1

我試圖找到一種有效的方式來設置限制我在C#中的每個組中的linq請求(例如,按組的7個項目)。我不想創建另一個羣組,我只想將其傳遞給另一個羣組。Linq - 在請求時設置組的限制

就目前而言,我這樣做是爲了填補我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> 

這裏是ressources:

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

回答

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) }; 
+0

是的,我嘗試了這一點,並有效地釋放了每個組的密鑰,我需要它,因爲它提供了一個GridView的組風格模板。 – 2012-08-08 11:22:27

+0

@AstironNaviir:如果你開始說這會有所幫助。編輯... – 2012-08-08 11:23:36

+0

謝謝,它很接近,但現在每個鍵的項目數是0(但在我擴展每個鍵的值列表時,我可以看到7篇文章......)。所以我的模板沒有看到任何項目,只是顯示的鍵... – 2012-08-08 11:41:28