У меня какая-то дилемма.
Пытаясь запросить мою БД через службу RIA из моего клиента Silverlight, я столкнулся со следующей проблемой. Целью является получение списка меню и подменю. (Примечание: у меня есть только список меню на 2 уровня, поэтому только 1 главное меню и несколько подменю, но эти подменю не содержат / не могут содержать другие подменю).
Первая часть:
public void LoadMenus(Action<ObservableCollection<Menu>> callback)
{
_context.Load(_context.GetMenusQuery(), lo =>
{
var menus = new EntityList<Menu>(_context.Menus, lo.Entities);
foreach (var m in menus.Where(x => x.Parent == x.MenuID))
{
foreach (var sm in LoadMenusByParentID(m.MenuID))
{
m.SubMenus.Add(sm);
}
}
callback.Invoke(menus);
}, null);
}
Неработающая версия loadMenusByParentID:
private IEnumerable<Menu> LoadMenusByParentID(int parentID)
{
var lo = _context.Load(_context.GetMenusByParentIDQuery(parentID));
var m = new EntityList<Menu>(_context.Menus, lo.Entities);
return m;
}
рабочая версия:
private IEnumerable<Menu> LoadMenusByParentID(int parentID)
{
return _context.Menus.Where(m => m.Parent == parentID && m.MenuID != parentID);
}
Пытаясь отказаться от хорошей практики, я намерен использовать функцию Load () (также потому, что это и асинхронная операция). Но по какой-то причине я не получаю от этого результата, в то время как когда я запускаю сам контекст LinqQuery, я получаю результат.
Метод My Service для нерабочей версии выглядит следующим образом:
public IQueryable<Menu> GetMenusByParentID(int parentID)
{
return ObjectContext.Menus.Where(m => m.Parent == parentID && m.MenuID != parentID);
}
У кого-нибудь есть идеи, почему эта кровавая штука не работает?
Большое спасибо заранее!
С уважением,
Том