3

我需要创建一个嵌套列表视图,并找到了一篇关于如何做的好文章,但我的情况有点不同。我是 linq 新手,需要一点帮助:)

我需要将我的数据转换为与该文章类似的格式才能工作(在上面的链接上,搜索“配置 ListView”并查看其正上方的表格)。

这是我的数据:

Format    Movie Name    Price
DVD       Star Wars     12.99
DVD       Star Wars II  13.99
Blue-Ray  Star Wars     15.99
Blue-Ray  Star Wars II  17.99

这是我所拥有的,并不是那么接近,但它是我所能得到的:

var MoviesToBuy = from Movie in dtMovieListDetails.AsEnumerable()
                    //join MovieDetails in dtMovieListDetails.AsEnumerable() on (string)Movie["ID"] equals (string)MovieDetails["ID"]
                    group Movie by new
                    {
                        Format = Movie["Format"],
                        Movies = Movie
                    } into grp

                    select new
                    {
                        Format = (string)grp.Key.Format,
                        Movies = grp.Key.Movies
                    };

        MoviesToBuy = MoviesToBuy.OrderBy(p => p.Format);

        lvwAmazonMovieGroup.DataSource = MoviesToBuy.ToList();
        lvwAmazonMovieGroup.DataBind();

我有 3 个具体问题/问题:

1.)我所拥有的不起作用。由于我在组中的第二列等于所有行,因此没有创建实际组。

2.) 尽管之前的问题,我也收到“数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource”错误。在这种情况下,Movies 列被创建为 DataRow 数据类型。不确定这是否是造成问题的原因。我能以某种方式在那个领域施法吗?

3.)我如何对电影中的字段进行排序。即最后我希望数据按格式排序,然后按电影名称排序,因此嵌套列表视图如下所示:

Blue-Ray
   Star Wars    12.99
   Star Wars II 13.99

DVD
   Star Wars    15.99
   Star Wars II 17.99

任何点都非常感谢!

在此先感谢,乍得

4

2 回答 2

1

我在想你可以从以下开始,调整正确的变量名和 AsEnumerable() 等。

它可以根据需要对您的电影进行排序,并根据您的要求将它们放入嵌套结构中:

var moviesToBuy = from movie in dtMovieListDetails
    orderby movie.Format, movie.Price
    group movie by movie.Format into grp
    select new
    {
        Format = grp.Key,
        Movies = grp.Select (g => new { MovieName = g.MovieName, Price = g.Price })
    };

这是一个实现上述查询的示例程序。

于 2012-06-05T23:53:06.677 回答
0

尝试这样的事情:

var res = from m in movies
          group m by m.Format into grouped
          orderby grouped.Key
          select new
          {
              Format = grouped.Key, 
              Movies = grouped.AsEnumerable().OrderBy(x => x.MovieName) 
          };

或者

var res = from m in movies
          orderby m.MovieName
          group m by m.Format into grouped
          orderby grouped.Key
          select new
          {
              Format = grouped.Key, 
              Movies = grouped.AsEnumerable()
          };

使用这个种子数据:

var movies = new[] { 
    new Movie { Format = "DVD", MovieName = "SW1"},
    new Movie { Format = "Blue-ray", MovieName = "SW1"},
    new Movie { Format = "DVD", MovieName = "SW2"},

    new Movie { Format = "Blue-ray", MovieName = "SW2"},

    new Movie { Format = "DVD", MovieName = "RF"}
};

出品:

Format: Blue-ray
    Movie: SW1
    Movie: SW2
Format: DVD
    Movie: RF
    Movie: SW1
    Movie: SW2

为了完整起见,我使用此代码生成上一个列表

foreach (var item in res)
{
    Console.WriteLine("Format: " + item.Format);

    foreach (var item2 in item.Movies)
    {
        Console.WriteLine("\tMovie: " + item2.MovieName);
    }
}
于 2012-06-05T23:33:18.910 回答