2

みんな私には2つの問題があります...最初に、名前と姓を照会し、データベースから結果を返すlinqクエリ検索があります。たとえば、ジョンを検索すると、完璧なジョン・トラボルタが返されます(私の問題です)ジョン・トラボルタの名前と姓を一緒に検索すると、結果が見つかりませんか?...ヘルプ。

問題番号 2: 再検索したときに検索結果をクリアするにはどうすればよいですか? 2回目に検索すると、前の検索の結果が

public class SearchResults
        {
            public string Name { get; set; }
            public string Surname { get; set; }

            public SearchResults(string name, string surname)
            {
                Name = name;
                Surname = surname;
            }



 protected void btnSearch_Click(object sender, EventArgs e)
        {
            string search = txtSearch.Text.ToLower().TrimEnd();
            lsSearchResults = null;
            lsSearchResults = new List<SearchResults>();
            Repeater1.DataSource = null;
            lsSearchResults.Clear();
            Repeater1.DataSource = "";
        }

        if (string.IsNullOrWhiteSpace(txtSearch.Text))
            {
              lblResults.Text = "Please enter a password & Em@ilAddress";

                lsSearchResults.Clear();

                return;
            }

        else
        {
            var found = (from User in myDB.Memberships
                         where User.Name.ToLower().Contains(txtSearch.Text.ToLower()) ||
                         User.Surname.ToLower().Contains(txtSearch.Text.ToLower())
                         select new { User.Name, User.Surname });

            // validates items in search query if Exist
            if (!ChillZARdev.App_Code.Utilities.IsEmpty(found))
            {
                foreach (var user in found)
                {
                    lsSearchResults.Add(new SearchResults(user.Name, user.Surname));
                    // ls.Add(user.Name + " " + user.Surname);

                    // Response.Write(user);
                }
                Repeater1.DataSource = lsSearchResults;

                Repeater1.DataBind();

             }
          }
4

3 に答える 3

1
var found = myDB.Memberships;
foreach(var word in txtSearch.Text)
{
    var word2=word;  //Must do this because word won't be right at execution
    found=found.Where(u=>u.Name.Contains(word2) || u.Surname.Contains(word2));
}

.ToLower を削除しました。列は既に大文字と小文字を区別しないとマークされているはずであり、直接変更するか、データベースの既定のカルチャを変更しない限り、.ToLower は削除されます。

于 2013-07-08T18:47:30.623 に答える
1

数か月前、私は同じ問題を抱えていました。私はシングルトン デザイン パターンを使用していましたが、根本的な問題はキャッシュにありました..そして、両方の問題に対して 1 つの解決策があります。LINQ のキャッシュを消去してみることができます。 SQL DataContext に、次の方法でそれを行うことができます

public static void ClearCache(this DataContext context) 
 { 
    const BindingFlags FLAGS = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
    var method = context.GetType().GetMethod("ClearCache", FLAGS); 
    method.Invoke(context, null); 
 } 

そのメソッドを呼び出すことができます

   public void DoWork() 
     { 
        //do work... 
        dataContext.ClearCache(); 
       //do more work... 
     } 

それが役に立てば幸い

于 2013-07-08T12:35:14.423 に答える