vb.net - Вставка количества файлов с именем XX в строку - PullRequest
1 голос
/ 24 марта 2011

Имеется следующий код, который создает таблицу всех изображений в папке.

VB:

Sub Page_Load(sender as Object, e as EventArgs)
    If Not Page.IsPostBack then
      Dim dirInfo as New DirectoryInfo(Server.MapPath("/images"))
      articleList.DataSource = dirInfo.GetFiles("*.jpg")
      articleList.DataBind()
    End If
  End Sub

Body:

<asp:DataGrid runat="server" id="articleList" AutoGenerateColumns="False" ShowHeader="false">
    <Columns>
      <asp:BoundColumn DataField="Name" />
    </Columns>
  </asp:DataGrid>

Результаты выглядят примерно так:

aa_01.jpg
aa_02.jpg
aa_03.jpg
bb_01.jpg
bb_02.jpg
cc_01.jpg
cc_02.jpg
cc_03.jpg
cc_04.jpg
...

Теперь я хочу сгруппировать их по первым двум символам, получить общее число для каждого и вставить их в отдельные строки. Так что для приведенного выше примера это будет что-то вроде:

Dim aa As String = 3
Dim bb As String = 2
Dim cc As String = 4

Есть идеи как?

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Вы можете сделать это, используя Linq.Попробуйте это.

dim q = From p in articles _
        Group By Name = p.Name.SubString(0,2) into g = group _
        Select GroupName = Name, _
               Count = g.Count()

Обновление (чтобы дать немного контекста в соответствии с комментариями)

Sub Page_Load(sender as Object, e as EventArgs)

    If Not Page.IsPostBack then
      Dim dirInfo as New DirectoryInfo(Server.MapPath("/images"))
      Dim articles = dirInfo.GetFiles("*.jpg")

      articleList.DataSource = articles
      articleList.DataBind()

      Dim groupings = From p in articles _
                      Group By Name = p.Name.SubString(0,2) into g = group _
                      Select GroupName = Name, _
                             Count = g.Count()

      ' do whatever you like with the groupings '
    End If

End Sub
0 голосов
/ 24 марта 2011

В C #, используя LINQ:

groupedArticleList = (from a in articleList
                      group a by a.Name.Substring(0, 2) into g
                      select new
                      {
                          GroupName = g.Key,
                          ArticleCount = g.Count()
                      });

Вы не можете на самом деле извлечь их в отдельные переменные, но вы можете использовать groupedArticleList как есть и проходить через него или преобразовать его в Dictionary<string, int>.

Извините, я не знаю синтаксис VB, но, надеюсь, это поможет.

...