0

私はまだデータベース(SQL)からのデータを使用してオートコンプリートテキストボックスで作業していますが、selectステートメントに何か問題があるか欠落しているため、テキストボックスの結果が得られないと思います。現在のコードは次のようになります。これは、ビューのjsonコードです。

       $(function () {
        $("#autoCompleteText").autocomplete({
            source: function (request, response) {
                var autoSearch = { searchText: $("#autoCompleteText").val() };
                $.ajax({
                    type: "POST",
                    traditional: true,
                    url: "/Products/jsonAutoComplete",
                    data: autoSearch,
                    dataType: "json",
                    success: function (data) {
                        response(data.d);
                    },
                    error: function (result) {
                        alert("Error");
                    }
                });
            },
            delay: 0,
            minLength: 2
        });
    });

コントローラでブレークポイントを実行するたびにメソッドjsonAutoCompleteが実行されますが、autcompleteに表示したいproductNameは常にnullであるため、これが機能することは間違いありません。selectステートメントを含む私のコードは次のとおりです。

    public JsonResult jsonAutoComplete(string searchText)
    {
        JsonResult data= new JsonResult();
        IList<Products> products = null; products = (from c in db.Products where c.CompanyId.Equals(companyId) && (c.ProductName.Contains("'%" + searchText + "%'")) select c).ToList();
Products prod = new Products();
        int productId = prod.Id;
        string productName = prod.ProductName;
        data.Data = new { productId = productId, productName = productName };
        return data;
    }`
4

2 に答える 2

5

LinqではSQL演算子またはSQL構文を使用できません。これがポイントです。LinqはSQLを抽象化することを目的としているため、%T-SQL固有のワイルドカード構文です。

この述語を持つだけで機能します。

from c in db.Products
where c.ProductName.Contains( searchText ) 
select c

ただし、Linqは、フリーテキスト検索では実際にはうまく機能しません。より良い検索システムのために、SQL Serverフルテキストインデックスを使用してから、単純な文字列検索ではなく、検索クエリの各用語を検索する動的SQLを生成します(ユーザーがより多くの制御と検索結果を取得できるため、 Googleのように動作します)。

于 2012-11-06T03:30:34.487 に答える
2

下記のように使用することもできます

    from c in db.Products
    where SqlMethods.Like(c.ProductName, "%searchtext%")
    select *;

.StartsWith()または、.EndsWith()またはを使用することもできます.Contains()

于 2012-11-06T05:07:30.667 に答える