在整个数据表中自动完成扩展程序“扩展”

时间:2010-06-21 08:48:37

标签: asp.net linq web-services autocompleteextender

我要求创建一个搜索数据表的自动完成功能。这是否可以快速简单地实现,还是编写合理数量的代码?

最初,我一直在使用webservice和linq指向单列的数据(IDDesc)并撤回产品列表:

Product.FinalProductsDataContext dbac = new Product.FinalProductsDataContext();

            return dbac.tblProduct
                .Where(r => r.Account== HttpContext.Current.Session["AccountKey"].ToString() && r.IDDesc.Contains(prefixText))
                .Distinct()
                .OrderBy(r => r.IDDesc)
                .Select(r => r.IDDesc)
                .Take(count)
                .ToArray();

但是,如果我希望自动完成查看所有列,是否需要为数据表中包含的每个列重复类似的LINQ语句,或者是否有“快速修复”?

我个人认为这不是一个理想的场景,但这是我必须努力的一个要求。

任何帮助或建议,非常感谢。

1 个答案:

答案 0 :(得分:0)

我没有尝试用LINQ完全解决这个 (并且为表中的每一列重复所有这些语句,以及重复敲击数据库),我想我会想要放点东西在数据库里做这里繁重的工作。

您可以创建一个视图,该视图从表中获取字段并将它们合并为一列,例如。

CREATE VIEW [dbo].[ProductView]
AS
SELECT     CAST(ProductName AS NVARCHAR(50)) AS 'ProductColumn'
FROM         dbo.Products
UNION
SELECT CAST(SupplierName AS NVARCHAR(50))
FROM dbo.Products
UNION
...

如果您将视图添加到上下文中,则允许您修改现有的LINQ查询并将其指向该视图,例如:

Product.FinalProductsDataContext dbac = new Product.FinalProductsDataContext();

return dbac.ProductView
    .Where(r => r.Account== HttpContext.Current.Session["AccountKey"].ToString() && r.ProductColumn.Contains(prefixText))
    .Distinct()
    .OrderBy(r => r.ProductColumn)
    .Select(r => r.ProductColumn)
    .Take(count)
    .ToArray();