我要求创建一个搜索数据表的自动完成功能。这是否可以快速简单地实现,还是编写合理数量的代码?
最初,我一直在使用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语句,或者是否有“快速修复”?
我个人认为这不是一个理想的场景,但这是我必须努力的一个要求。
任何帮助或建议,非常感谢。
答案 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();