【问题标题】:Silverlight Autocomplete & WCF RIA Services: Is the entire list returned to the client?Silverlight 自动完成和 WCF RIA 服务:是否将整个列表返回给客户端?
【发布时间】:2010-09-24 04:13:43
【问题描述】:

我有一个最终将包含数千条记录的数据库,并将使用 Silverlight 自动完成框控件和 WCF RIA 服务搜索此列表。我在域数据源中为“GetXXXQuery”使用没有任何参数的基本实现:

public IQuerable<XXX> GetXXXs()
{
    return this.ObjectContext.XXXs;
}

我将在使用“名称”作为 ValueMemberPath 的自动完成中使用此查询的返回值。

我的对象列表现在非常小,因此列出我拥有的所有记录非常快。我的问题是:一旦我的记录列表变大,或者如果更多人访问服务器,这种实现是否有效?它是返回我的数据库中的整个记录​​列表,还是 IQueryable 对象以某种方式允许基于我的自动完成框中的字符串进行查询,从而有效地从我的数据库中返回一小部分记录?

谢谢,丹尼斯

【问题讨论】:

    标签: silverlight autocomplete wcf-ria-services


    【解决方案1】:

    如果您向 RIA Linq 查询添加搜索词,即向 RIA Linq 查询添加 where 子句,它将在服务器端解析。只会传回匹配的结果,而不是整个表*。

    IQuerable 查询实际上是由 Ria 服务在客户端序列化并传递给服务器执行的。辉煌的系统。对于分页/搜索数百万条记录特别有用。

    *(注意:如果给定术语有很多匹配项,您可能需要决定是否返回有限数量的记录。您也不想开始搜索,除非至少 3 个字符有已输入)。

    【讨论】:

    • HiTech Magic - 感谢您的回复,但您提到的数据网格和分页让我想知道......在那种情况下,寻呼机不是事后操纵查询吗?它在返回的 IQueryable 上调用 skip(n).take(m)?域数据源本身的查询不需要页面#/页面大小参数,对吗?我想我可以尝试用 fiddler 来查看这个以查看响应......这可能会为我澄清,但我想我还是会问。
    • 你提到了 where 子句......这就是我认为自动完成控件处理的问题,毕竟它有诸如“开头”或“包含”之类的模式,有和没有区分大小写,所有这些都需要通过我的“GetXXX”查询来复制,这对我来说没有意义。
    • @Dennis Ward:非常正确。有时我会在没有读回来的情况下打字而忘乎所以。您确实可以将附加条款放在客户端。正是对查询的评估导致将 Linq 发送到服务器。我会纠正我对答案的措辞:)
    • 高科技魔法 - 再次感谢。我已经对此进行了更多研究,发现我应该接受您的建议,并使用“OnPopulating”事件并传递 e.Parameter(在 OnPopulating 事件中传递的 PopulatingEventArgs e)。我想我正在寻找一个确认或更具体的答案......有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多