我如何分解我的数据,以便我可以通过我的视图



我是asp.net的绝对初学者,我有一个相当复杂的问题,特别是我如何获得我刚刚从数据库中获得的数据。下面是我的查询和处理数据的开始。

        var brandslist = from brand in brandDB.brands
                         join brand_family in brandDB.brand_family
                         on brand.brand_family_id equals brand_family.bf_id
                         orderby brand_family.brand_family_name,
                                 brand.priority,
                                 brand.genre_id
                         select new
                         {
                             brand_family.brand_family_name,
                             brand.priority,
                             brand.roll_image
                         };
        var viewModel = new BrandIndexViewModel{
            Brands = brandslist.ToList()
        };

我习惯用PHP做事情,而不是asp,这就是为什么我完全被难住了。我确实有一个以前的数据库调用工作,但我只从数据库中获得一个东西,而这里我试图从数据库中获得多个项目。我想我的问题是我如何使数据访问到我的视图类?

感谢所有帮助我解决这个问题的人,因为我相信这是一个相当基本的问题。

编辑

下面是我在编译时得到的错误信息:

错误1无法隐式转换类型"System.Collections.Generic"。列出' to 'System.Collections.Generic。目录C:InetpubwwwroothcdhcdControllersHomeController.cs 35 26 hcd

EDIT 2

只是为了确认我正在使用ASP MVC 2。

3

编辑

这是我的品牌索引视图模型(但我已经看到了一个可能的问题)

public class BrandIndexViewModel
{
    public List<string> Priority { get; set; }
    public List<string> FamilyName { get; set; }
    public List<string> RollImage { get; set; }
    public List<string> Brands { get; set; }
}

你的问题的根源是你的LINQ查询返回一个匿名类型,但你分配给品牌,这是一个List<string>。最终,你需要得到你想要的字符串。我将假设"brand_family_name"是您想要进入List<string> Brands的数据。

var viewModel = new BrandIndexViewModel{
            Brands = brandslist.Select(b => b.brand_family_name).ToList() // Or whichever property you want to use to populate List<string> Brands
        };

正如在其他答案中提到的,您不指定您想要的ViewModel的Brands列表(这将是最合乎逻辑的东西,如brand.Name)。发布brandbrand_family类可以澄清这一点。

如果我理解正确,你基本上需要一个Brands列表显示在你的视图。在这种情况下,将FamilyName, Priority, RollImageBrand分组到一个对象中,并在ViewModel中列出它们:

public class BrandIndexViewModel
{
    public List<BrandIndexItem> BrandIndexItems { get; set; }
}
public class BrandIndexItem
{
    public string Priority { get; set; }
    public string FamilyName { get; set; }
    public string RollImage { get; set; }
    public string Brand { get; set; }
}

在这种情况下,您不必为了填充每个列表而执行Select。相反,您可以将查询结果直接投影到ViewModel上。下面是使用join的代码:

    var viewModel = new BrandIndexViewModel
                    {
                        BrandIndexItems = 
                           (from brand in brandDB.brands
                            join brand_family in brandDB.brand_family
                            on brand.brand_family_id equals brand_family.bf_id
                            orderby brand_family.brand_family_name,
                                    brand.priority,
                                    brand.genre_id
                            select new BrandIndexItem
                            {
                                FamilyName = brand_family.brand_family_name,
                                Priority = brand.priority,
                                RollImage = brand.roll_image,
                                Brands = brand.name // ?
                            }).ToList()
                    }    

此外,您提到了使用数据库,但没有提到您是否正在使用ORM,如EF或LINQ-to-SQL。如果你正在使用其中一个,如果你能发布你的模型的截图,那将会很有帮助。同时,根据你的代码,看起来你在brand_familybrand之间有一对多的关系,所以如果你使用ORM,你可能有一个导航属性brand.brand_family。在这种情况下,您将不需要在LINQ查询中使用join:

    var viewModel = new BrandIndexViewModel
                    {
                        BrandIndexItems = 
                           (from brand in brandDB.brands
                            orderby brand.brand_family.brand_family_name,
                                    brand.priority,
                                    brand.genre_id
                            select new BrandIndexItem
                            {
                                FamilyName = brand.brand_family.brand_family_name,
                                Priority = brand.priority,
                                RollImage = brand.roll_image,
                                Brands = brand.name // ?
                            }).ToList()
                    }

我假设您使用的是ASP。净MVC。

要从视图中访问brandslist变量,请使用model参数从控制器中传入它。例如:

ActionResult ListAllBrands()
{
    var brandslist = from brand in brandDB.brands
                         join brand_family in brandDB.brand_family
                         on brand.brand_family_id equals
                         brand_family.bf_id
                         orderby brand_family.brand_family_name,
                         brand.priority,
                         brand.genre_id
                         select new
                         {
                             brand_family.brand_family_name,
                             brand.priority,
                             brand.roll_image
                         };
    return View("List", brandslist);
}

那么在你的视图中,将会有一个名为"Model"的变量,它将包含这个值。然后可以使用for/each循环遍历. aspx代码中的每条记录。

相关内容

  • 没有找到相关文章

最新更新