Расширитель автозаполнения «расширен» по всей таблице данных - PullRequest
0 голосов
/ 21 июня 2010

У меня есть запрос на создание автозаполнения, которое будет искать таблицу данных.Это достижимо быстро и просто или это случай написания разумного количества кода?

Изначально я использовал веб-сервис и 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 для каждого из столбцов, содержащихся в таблице данных, или есть'quick fix'?

Лично я не думаю, что это идеальный сценарий, но это запрос, к которому я должен стремиться.

Любая помощь или совет, очень признателен.

1 Ответ

0 голосов
/ 21 июня 2010

Вместо того, чтобы пытаться решить это полностью с помощью 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();
...