c#linq通过过滤器获取结果并丢弃空字符串
我有以下Linq表达式:c#linq通过过滤器获取结果并丢弃空字符串,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有以下Linq表达式: results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast != string.Empty && r.MothersLast.StartsWith(mothersLast))).ToList(); 我想做的是: 如果母末尾< /强>变量是一个字符串。空,那么不要考虑R.MaScript最后的过滤,否则由R.MaistsEnte
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast != string.Empty && r.MothersLast.StartsWith(mothersLast))).ToList();
我想做的是:
如果<强>母末尾< /强>变量是一个字符串。空,那么不要考虑R.MaScript最后的过滤,否则由R.MaistsEnter过滤。StartWith(母亲最后)。< /P> 你知道怎么做吗
谢谢尝试以下方法results = results
.Where(r =>
r.FathersLast.StartsWith(fathersLast) &&
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast)))
.ToList();
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast))
具体变化如下
results = results
.Where(r =>
r.FathersLast.StartsWith(fathersLast) &&
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast)))
.ToList();
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast))
这将只检查是否匹配长度大于0的字符串
results = results
.Where(r =>
r.FathersLast.StartsWith(fathersLast) &&
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast)))
.ToList();
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast))
具体变化如下
results = results
.Where(r =>
r.FathersLast.StartsWith(fathersLast) &&
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast)))
.ToList();
(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast))
这将只检查是否匹配长度大于0的字符串。请尝试以下操作:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast == string.Empty || r.MothersLast.StartsWith(mothersLast))).ToList();
请尝试以下方法:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast == string.Empty || r.MothersLast.StartsWith(mothersLast))).ToList();
嗯,每个字符串都以string.Empty
开头,因此如果mothersLast==string.Empty
您就不必再做任何工作了。只需将查询简化为:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) &&
r.MothersLast.StartsWith(mothersLast)).ToList();
嗯,每个字符串都以string.Empty
开头,因此如果mothersLast==string.Empty
您就不必再做任何工作了。只需将查询简化为:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) &&
r.MothersLast.StartsWith(mothersLast)).ToList();
为什么要反复检查
mothersLast
的string.Empty的值?我看不到任何会修改其值的内容,因此只需在运行LINQ语句之前检查一次:
if (mothersLast != string.Empty)
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) &&
r.MothersLast.StartsWith(mothersLast)).ToList();
这基本上就是您的代码正在做的事情,不管您是否有意这样做
看来不管发生什么,你都想通过父亲的遗孀来过滤。在这种情况下,为了便于阅读,只需将其分成两条语句:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast)).ToList();
if (mothersLast != string.Empty)
r.MothersLast.StartsWith(mothersLast)).ToList();
两次强制转换到ToList()
是不必要的,您可以对其进行编码,但我会根据列表的大小将其留给您。为什么要反复检查字符串的mothersLast
值。空的
?我看不到任何会修改其值的内容,因此只需在运行LINQ语句之前检查一次:
if (mothersLast != string.Empty)
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) &&
r.MothersLast.StartsWith(mothersLast)).ToList();
这基本上就是您的代码正在做的事情,不管您是否有意这样做
看来不管发生什么,你都想通过父亲的遗孀来过滤。在这种情况下,为了便于阅读,只需将其分成两条语句:
results = results.Where(r => r.FathersLast.StartsWith(fathersLast)).ToList();
if (mothersLast != string.Empty)
r.MothersLast.StartsWith(mothersLast)).ToList();
两次强制转换到ToList()
是不必要的,您可以对其进行编码,但我将根据列表的大小决定这一点