假设我们有下表:
Person:
PersonID,
Name,
Age,
Gender
并且我们提供了一个搜索功能,允许用户根据名称 来搜索表。和/或 年龄。
编写 SQL(或 LINQ)查询的棘手部分是用户可以选择搜索两个字段、任何一个字段或不搜索字段。如果他想搜索所有内容,则只需将文本框留空即可。
这样做的逻辑可以写成如下:
var p;
if(Name_TextBox=='')
{
p=from row in person
select row ;
}
else
{
p= from row in person
where row.Name=Name_TextBox
select row ;
}
// repeat the same for age
现在过了一会儿,代码变得很长而且很乱......我怎样才能用 将上面的内容压缩成单个查询没有 if-else ?
最佳答案
试试这样的代码
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 则不会添加到 where,如果给出则添加。
关于linq - LINQ 中的条件多字段搜索和过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1005961/