2013-11-24 4 views
1

Я пытаюсь сделать что-то похожее на предыдущее сообщение, за исключением того, что вместо LINQ я использую методы расширения. Я получаю сообщение об ошибке, указывающее, что & & не может быть использован, так как бы я мог искать в таблице, используя две строки, введенные пользователем?Правильный синтаксис для метода расширения Метод

var query = (App.DBConnection.Table<Notes>().Where(
        c => c.Note.Contains(textBox1.Text) && c => c.Note.Contains(textBox2.Text))).Single(); 
TextBox_Results.Text = query.Note; 

ответ

2

Снимите второй lambda оператор c =>

var query = App.DBConnection.Table<Notes>() 
    .Where(c => c.Note.Contains(textBox1.Text) 
      && c.Note.Contains(textBox2.Text))) 
    .Single(); 

Кроме того, я хотел бы использовать FirstOrDefault вместо Single. Последний выбрасывает InvalidOperationException, если элементов нет или их больше одного. Первый возвращает null, если ни один элемент не соответствует предикату в Where.

+0

Если один результат, как ожидается, то я думаю, что 'Single()' имеет наибольший смысл, потому что это неясно, когда происходит что-то неожиданное. – svick

+2

@svick: «String.Contains» на двух разных подстроках - это ничего, где я ожидаю единственный результат. –

+0

Спасибо! Любая идея, как я буду печатать это в TextBox? 'TextBox_Results.Text = query.Note;' выдает ошибку, которая заявляет: «Ссылка на объект не установлена ​​в экземпляр объекта». – cdalto

0

Вам не нужно объявить переменную c снова

Where(c => c.Note.Contains(textBox1.Text) && c => c.Note.Contains(textBox2.Text))) 

должен быть

Where(c => c.Note.Contains(textBox1.Text) && c.Note.Contains(textBox2.Text))) 
Смежные вопросы