ASP.Net MVC - 无法将LINQ查询结果转换为ViewModel

时间:2014-04-10 15:57:07

标签: asp.net-mvc linq asp.net-mvc-viewmodel

我正在尝试使用ViewModel绑定部分视图中的树视图菜单控件。 我已经创建了一个嵌套的viewModel,假设这是一次携带导航树菜单所需的所有嵌套数据的正确方法,因此我编写了我的linq查询以嵌套方式获取数据。作为新手,我不是100%确定这是正确的方法。 我试图用Linq查询结果绑定我的视图模型。我的模型是嵌套的,我的Linq查询也是如此。我很难将这两者结合在一起。无论我怎样尝试我都会遇到类型转换错误,例如无法从Type IQueriable转换为IList of collections ..我的代码:

        // ViewModel
namespace My.Namespace
{
    public class MyViewModel
    {
        public decimal CategoryID { get; set; }
        public string CategoryName { get; set; }
        public decimal Badge { get; set; }
        public IList<SubCategories> CategorySubCategories { get; set; }
    }
    public class SubCategories
    {
        public decimal SubCategoryID { get; set; }
        public string SubCategoryName { get; set; }
        public decimal Badge { get; set; }
        public List<Items> SubCategoryItems { get; set; }
    }
    public class Items
    {
        public decimal ID { get; set; }
        public string ItemName { get; set; }
        public List<SubItems> SubItems { get; set; }
    }
    public class SubItems
    {
        public decimal ID { get; set; }
        public string SubItemName { get; set; }
    } 
}


//Databinding code:

    MyViewModel result = new MyViewModel();
            var query= (List<MyViewModel>)(from c in dbContext.TableName
                         where c.CHILD_ID == 0
                         select new MyViewModel
                         {
                             CategoryID = c.ELEMENT_ID,
                             CategoryName = c.CHILD_DESC,
                             CategorySubCategories = (List<SubCategories>)(from s in dbContext.TableName
                                                                           where s.PARENT_ID == c.ELEMENT_ID
                                                                           select new SubCategories
                                                                           {
                                                                               SubCategoryID = s.ELEMENT_ID,
                                                                               SubCategoryName = s.CHILD_DESC,
                                                                               SubCategoryItems = (List<Items>)(from i in dbContext.TableName
                                                                                                                where i.PARENT_ID == s.ELEMENT_ID
                                                                                                                select new Items
                                                                                                                {
                                                                                                                    ID = i.ELEMENT_ID,
                                                                                                                    ItemName = i.CHILD_DESC
                                                                                                                }
                                                                                                   )
                                                                           }
                                                                           )
                         });

return query.toList();

我得到的错误是@ line:var query =(List)(来自dbContext.TableName中的c) 错误: 无法转换类型为#System; System.Data.Entity.Infrastructure.DbQuery 1[MyViewModel]' to type 'System.Collections.Generic.List 1 [MyViewModel]&#39;。

的对象

1 个答案:

答案 0 :(得分:0)

在视图模型上,将List类型更改为IEnumerable类型。确保不对这些子选择使用.ToList()扩展方法。

结果类型的子选择语句不是List的实例,而是实现IEnumerable接口。他们可能会实现ICollection,IList等,但你可以使用它。