Я пытаюсь связать элемент управления меню в виде дерева в частичном представлении с ViewModel. Я создал вложенную модель представления, предполагая, что это правильный способ одновременно переносить все вложенные данные, необходимые для меню дерева навигации, и поэтому я написал свой запрос linq для извлечения данных во вложенном режиме. Как новичок, я не уверен на 100%, что это правильный способ. Я пытаюсь связать свою модель представления с результатом запроса Linq. Моя модель вложена, как и мой запрос Linq. Я столкнулся с трудностями при соединении этих двух вместе. Каким бы способом я ни пытался, я получаю ошибку приведения типа, например, не могу преобразовать из Type IQueriable в IList коллекций. Мой код:
// 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) (from c in dbContext.TableName Error: Невозможно привести объект типа 'System.Data.Entity.Infrastructure.DbQuery1[MyViewModel]' to type 'System.Collections.Generic.List
1 [MyViewModel]'.
1' to type 'System.Collections.Generic.List
1. LINQ to Entities поддерживает только приведение примитивов EDM или перечислимых типов. - person Hasteq   schedule 10.04.20141[SubCategories] ToList[SubCategories](System.Collections.Generic.IEnumerable
1 [SubCategories] ) ', и этот метод нельзя преобразовать в выражение хранилища. - person Hasteq   schedule 10.04.2014