RIA服务 - 自定义查询

时间:2011-09-05 09:05:28

标签: c# silverlight dns ria

我处于某种两难的境地。

尝试通过我的silverlight客户端的RIA服务查询我的数据库,遇到了以下问题。目标是获取菜单和子菜单列表。 (注意:我只有一个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);
    }

任何人都知道为什么血腥的东西不起作用?

非常感谢提前! 亲切的问候, 汤姆

1 个答案:

答案 0 :(得分:1)

您的“加载”版本不会(并且不能)等待加载数据。 Load方法是异步调用,并且立即返回的值具有空的Entities集合。

IEnumerable版本返回一个延迟加载查询,因此它在使用时加载数据。

我想知道在提供具体建议之前你是如何使用LoadMenusByParentID的,但基本上你需要重新设计消费者以使用异步数据(或坚持使用延迟加载)