فكر نميكنم با يك دستور اين كار رو انجام داد.
2 روش پيشنهادي براي حلش
روش اول:
دستور SQL رو توي APP با توجه به كلمات بسازيد و اجرا كنيد (چيزي شبيه كد زير)
if (!String.IsNullOrEmpty(textBox1.Text.Trim()))
{
string sqlStr = "Select * From TableName Where ";
foreach (string str in textBox1.Text.Split(new char[] { ' ' }))
sqlStr += "FieldName like %" + str + "% AND ";
sqlStr = sqlStr.Substring(0, sqlStr.Length - 4);
MessageBox.Show(sqlStr);
}
اين روش براي حالتي كه تعداد ركوردها زياد نيست و اندازه متن هاي فيلدها هم زياد نيست مناسبه
روش دوم:
كاري شبيه عملكرد موتورهاي جستجو انجام بديد. يعني اينكه روي تمام كلمات ايندكس گذاري كنيد.
براي اين كار بايد يك جدول ديگه داشته باشيد كه يك فيلدش كلمه ها ذخيره ميشه و توي فيلد ديگه idهاي متنها در جدول اصلي.
به اينصورت كه زمان ذخيره متن به ازا تك تك كلمات كار زير رو انجام بديد:
- توي جدول كمكي كلمه رو جستجو كنيد اگه وجود داشت id متن جديد رو به ليست idها اضافه كنيد اگر هم وجود نداشت به عنوان يك سطر جديد به جدول كمكي اضافه كنيد.
زمان جستجو هم با جستجو روي جدول كمكي ميتونيد ليست idها رو بدست بياريد و از روي اين ليست متن ها رو پيدا كنيد(چون هر فيلد در جدول كمكي يك كلمه رو نشون ميده به راحتي ميتونيد با دستور in ليست رو تهيه كنيد)
اين روش زمان ذخيره كردن متن جديد يك مقدار سربار داره ولي سرعت واكشي رو به مراتب زياد ميكنه(چون توي هر 2 جدول بر اساس فيلدي كه ايندكس گذاري شده است جسجتو ميكنيم)