1

我有一个搜索页面,您可以在其中输入 4 个搜索条件。用户可以输入全部 4 个或更少,当我进行搜索时,如果输入了所有 4 个,则必须查找所有 4 个,如果没有输入未输入的值则全部取走。示例:我的搜索参数是 FirstName、LastName、City 和 Zip。现在,如果有人输入 John 和 Zip 01803,我需要忽略其他 2 并在该邮政编码中查找所有 Johns。我可以以某种方式在一个查询中做到这一点吗?我知道如果我写多个来检查哪些值是空的,我可以做到这一点,但这看起来并不那么乏味。我想知道我是否可以在 LINQ 中使用“任何”或“全部”来做到这一点?

 if (fname == null) fname = "";
 if (lname == null) lname = "";
 if (city == null) city = "";
 var results = from c in context.Company.Where(d => d.CompanyCode == identifikator)
                      join p in context.Person.Where(d => (d.FirstName.Any(??) || d.FirstName.Contains(fname)) && d.LastName.Contains(lname) && d.City.Contains(city) && d.ZIP==zip) on c.CompanyId equals p.Identifikation
                      join ts in context.TSSession on p.PersonId equals ts.PersonId

                      select new
                      {
                          firstname = p.FirstName,
                          lastname = p.LastName,
                          mail = p.EMail,
                          order = tp.Order,
                          timestamp = ts.TimeStamp,
                          personid = p.PersonId
                      };
4

1 回答 1

2

你可以像这样构建你的where表达式:

var personsSubQuery = context.Persons;
if(fname != null)
     personsSubQuery = personsSubQuery.Where(x=>x.FirstName.Contains(fname));
if(lname != null)
     personsSubQuery = personsSubQuery.Where(x=>x.LastName.Contains(lname));

等等。

然后在您的查询中使用personsSubQuery代替您的context.Persons.Where.

在这种情况下,我看不到Any或没有All可用的方法。

于 2013-06-20T13:30:15.137 回答