Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#linq通过过滤器获取结果并丢弃空字符串_C#_Linq_Linq To Entities - Fatal编程技术网

c#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

我有以下Linq表达式:

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()
是不必要的,您可以对其进行编码,但我将根据列表的大小决定这一点