Reference URL: http://jasear.wordpress.com/2012/04/19/sharepoint-2010-basic-list-search-filter-webpart/
.ascx
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$"%>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ListSearchUserControl.ascx.cs" Inherits="SearchWebpart.ListSearch.ListSearchUserControl" %>
<script type="text/javascript" src="/sites/new1/_layouts/scripts/jquery-1.6.3.min.js" src="/sites/new2/_layouts/scripts/jquery-1.6.3.min.js">
     $(document).ready(function () {  
        var base_RefreshPageTo = RefreshPageTo;  
         RefreshPageTo = function (event, url) {  
             var filterName = getQuerystring('FilterName');  
             var filterValue = getQuerystring('FilterMultiValue');  
             var newUrl = url + '&FilterName=' + filterName + '&FilterMultiValue=' + filterValue;  
             if (filterName != '' && filterValue != '') {  
                 base_RefreshPageTo(event, newUrl);  
             }  
             else {  
                 base_RefreshPageTo(event, url);  
            }  
             return;  
         }  
     });  
     function getQuerystring(key, default_) {  
         if (default_ == null) default_ = "";  
         key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");  
         var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");  
         var qs = regex.exec(window.location.href);  
         if (qs == null)  
            return default_;  
         else  
             return qs[1];  
     }  
 </script> 
<table>  
     <tr>  
         <td>  
             <strong>Search Criteria:</strong>  
         </td>  
         <td>  
             <asp:TextBox ID="TbSearchText" runat="server" Width="300px"></asp:TextBox>  
         </td>  
         <td>  
                
         </td>  
         <td>  
             <strong>Field name:</strong>  
         </td>  
         <td>  
            <asp:DropDownList ID="DdlListFields" runat="server">  
             </asp:DropDownList>  
         </td>  
         <td>  
                
         </td>  
         <td>  
             <div align="right">  
                 <asp:Button ID="BtnSearch" runat="server" OnClick="BtnSearch_Click" Text="Search" />  
                 <asp:Button ID="BtnClearFilter" runat="server" Visible="false" OnClick="BtnClearFilter_Click" 
                     Text="Clear Criteria" />  
             </div>  
        </td>  
     </tr>  
 </table>
.ascx.cs
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Text;
using System.Collections.Specialized;  
using System.Collections.Generic;
using System.Drawing;
namespace SearchWebpart.ListSearch
{
    public partial class ListSearchUserControl : UserControl
    {
        //SPSite site = SPContext.Current.Site;
        //SPWeb web;
        //SPList list;
         public class OptionEntity  
     {  
              public string Id { get; set; }  
        /// <summary>  
         /// Gets or sets the title.  
         /// </summary>  
         /// <value>The title.</value>  
         public string Title { get; set; }
         public string To { get; set; }
         public OptionEntity()  
         {  
         }  
     } 
       private List<OptionEntity> GetSharePointListFieldItems()  
         {  
             List<OptionEntity> fieldItems = new List<OptionEntity>();  
             fieldItems = new List<OptionEntity>();  
             OptionEntity item;  
            SPField field;  
            StringCollection viewFieldCollection = SPContext.Current.ViewContext.View.ViewFields.ToStringCollection();  
             foreach (string viewField in viewFieldCollection)  
             {
                 //SPSite site = SPContext.Current.Site;
                 //SPWeb web = site.OpenWeb();
                 //SPList list = web.Lists["peoplepicker"];
                 field = SPContext.Current.List.Fields.GetFieldByInternalName(viewField);  
                 item = new OptionEntity();  
                 item.Id = field.InternalName;
                 item.Title = field.Title;
                fieldItems.Add(item);
             }
             return fieldItems;  
         }  
         protected override void CreateChildControls()  
         {  
            base.CreateChildControls();  
            List<OptionEntity> items = GetSharePointListFieldItems();  
             DdlListFields.DataSource = items;  
             DdlListFields.DataTextField = "Title";  
             DdlListFields.DataValueField = "Id";  
             DdlListFields.DataBind(); 
         }  
         /// <summary>  
         /// Raises the <see cref="E:System.Web.UI.Control.Load"/> event.  
         /// </summary>  
         /// <param name="e">The <see cref="T:System.EventArgs"/> object that contains the event data.</param>  
         protected override void  OnLoad(EventArgs e)  
         {  
            base.OnLoad(e);  
             if (!IsPostBack)  
             {  
                 if (Request.QueryString["FilterName"] != null)  
                 {  
                     DdlListFields.SelectedValue = Request.QueryString["FilterName"].ToString();  
                 }  
                if (Request.QueryString["FilterMultiValue"] != null)  
                 {  
                    TbSearchText.Text = Request.QueryString["FilterMultiValue"].ToString().Replace("*", "");  
                   BtnClearFilter.Visible = true;  
                }  
             }  
        }  
         /// <summary>  
         /// Handles the Click event of the BtnSearch control.  
        /// </summary>  
         /// <param name="sender">The source of the event.</param>  
         /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  
         protected void BtnSearch_Click(object sender, EventArgs e)  
        {  
            string redirectUrlFormat = "{0}?FilterName={1}&FilterMultiValue={2}";  
            string[] selectionCollection = TbSearchText.Text.ToString().Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);  
             StringBuilder sbValues = new StringBuilder();  
             foreach (string selection in selectionCollection)  
             {  
                 sbValues.Append("*" + selection.Trim() + "*;");  
            }  
             string urlToRedirectTo = string.Format(redirectUrlFormat, Request.Url.GetLeftPart(UriPartial.Path), DdlListFields.SelectedValue, sbValues.ToString());  
             Response.Redirect(urlToRedirectTo);  
         }  
         /// <summary>  
         /// Handles the Click event of the BtnClearFilter control.  
        /// </summary>  
        /// <param name="sender">The source of the event.</param>  
         /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  
         protected void BtnClearFilter_Click(object sender, EventArgs e)  
         {  
             Response.Redirect(Request.Url.GetLeftPart(UriPartial.Path));  
         }  
    }
}