0

データテーブルを検索するオートコンプリートを作成するようリクエストがあります。これは迅速かつ簡単に達成できますか、それとも妥当な量のコードを書く場合ですか?

もともと、私はWebサービスとlinqを使用して、1列分のデータ(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ステートメントを繰り返す場合ですか、それとも「クイックフィックス」がありますか?

個人的にはこれが理想的なシナリオではないと思いますが、これは私が努力しなければならない要求です。

どんな助けやアドバイスも大歓迎です。

4

1 に答える 1

0

これをLINQで完全に解決しようとする(そして、テーブルの各列に対してこれらのステートメントをすべて繰り返し、データベースを繰り返しヒットする)のではなく、データベースに何かを入れて、ここで手間のかかる作業を行うことを検討したいと思います。

テーブルからフィールドを取得し、それらを1つの列に統合するビューを作成できます。

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();
于 2010-06-21T11:29:11.607 に答える