我正在尝试使用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;。
答案 0 :(得分:0)
在视图模型上,将List类型更改为IEnumerable类型。确保不对这些子选择使用.ToList()扩展方法。
结果类型的子选择语句不是List的实例,而是实现IEnumerable接口。他们可能会实现ICollection,IList等,但你可以使用它。