Чтобы сделать это более ясным ответом на основе комментария @Gideon Engelberths, 5-го в вопросе, я пропустил «использование системы»; используя директиву в моем классе:
using System.Reactive.Linq;
using System;
, которая затем исправила проблему с компилятором. Спасибо Гедеон.
Одна альтернатива, которую я использовал в SQL, которая может быть реализована и в Linq, - это
var p = from p in Person
where p.Name == Name_TextBox || Name_TextBox == String.Empty
select p;
(Обратите внимание, что ваш linq использует синтаксис SQL, который не компилируется. Также вы можете 'не объявляйте переменную, как вы делаете, без прямого присвоения значения)
Попробуйте такой код
string personName = txtPersonName.Text;
int personAge = Convert.ToInt32(txtAge.Text);
var opportunites = from p in this.DataContext.Persons
select new
{
p.PersonID,
p.Name,
p.Age,
p.Gender
};
if (personsID != 0)
opportunites = opportunites.Where(p => p.PersonID == personID);
if (personName != string.Empty)
opportunites = opportunites.Where(p => p.Name.StartsWith(personName));
if (personAge != 0)
opportunites = opportunites.Where(p => p.Age == personAge);
Это будет работать нормально. Если personName не указано, оно не будет добавлено туда, а если указано, оно будет добавлено.