我有一个搜索页面,您可以在其中输入 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
};