Поисковый запрос С# с linq

Я пытаюсь сделать подходящий запрос linq, чтобы соответствовать моим поисковым функциям.

У меня есть таблица со следующими столбцами: "имя" | 'фамилия' | 'описание'. со следующими данными: "Петр" | 'Малдер' | "Это небольшое описание."

Мое ключевое слово для поиска может быть что-то вроде: "peter" или "небольшое описание".

Теперь, если я использую следующее выражение linq в лямбде:

mycontext.persons
    .Where(t => 
        search.Contains(t.Firstname) || 
        search.Contains(t.Lastname) || 
        search.Contains(t.Description).Select(p => p)
    .ToList();

Теперь я получаю свой результат, когда использую "Питер", но если я использую "Пит" или "Небольшое описание", я не получаю никаких результатов. Как я могу сделать свое выражение linq, чтобы оно могло искать в данных столбца совпадения?

Ответ 1

Думаю, ты просто отдал его назад:

mycontext.persons
    .Where(t => 
        t.Firstname.Contains(search) || 
        t.Lastname.Contains(search) || 
        t.Description.Contains(search))
    .ToList();

Ответ 2

Одним из возможных (но, вероятно, не оптимальным решением) было бы добавить все ваши поля и сделать Contains в поисковом терминах.

var result = persons.Where(q => (q.Description + " " q.FirstName + " " q.LastName)
                    .ToLower()
                    .Contains(searchTerm.ToLower()))
                    .ToList();

Ответ 3

попробуйте этот код.

private void SearchData()
{
    Model1Container model = new Model1Container();
    try
    {
        var query = model.Scholars.AsQueryable();
        if (!string.IsNullOrEmpty(this.txtSearch.Text))
        {
            //  query = query.Where(x=>x.ScholarName.StartsWith(txtSearch.Text));
            query = (from Schl in model.Scholars
                where Schl.ScholarName.StartsWith(txtSearch.Text) ||
                      Schl.PhoneRes.StartsWith(txtSearch.Text) ||
                      Schl.PhoneOff.StartsWith(txtSearch.Text) ||
                      Schl.Mobile.StartsWith(txtSearch.Text) ||
                      Schl.Email.StartsWith(txtSearch.Text)
                orderby Schl.ScholarName
                select Schl);
        }
        this.dgvScholarList.DataSource = query.ToList();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

Ответ 4

Взгляните на NinjaNye.SearchExtensions. Это может быть именно то, что вам нужно.