2014-01-08 48 views
0

我有以下的LINQ表達式:C#LINQ通過過濾器得到的結果,並丟棄串空

results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast != string.Empty && r.MothersLast.StartsWith(mothersLast))).ToList(); 

我想要做的是:

如果mothersLast變量是的String.Empty,然後不要考慮用r.MothersLast過濾,否則按r.MothersLast.StartWith過濾(mothersLast)。

如何做到這一點的任何線索?

感謝

回答

2

請嘗試以下操作:

results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast == string.Empty || r.MothersLast.StartsWith(mothersLast))).ToList(); 
1

請嘗試以下

results = results 
    .Where(r => 
    r.FathersLast.StartsWith(fathersLast) && 
    (String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast))) 
    .ToList(); 

手術改變以下

(String.IsNullOrEmpty(mothersLast) || r.MothersLast.StartsWith(mothersLast)) 

這隻會檢查的mothersLast的比賽是長度的字符串大於0

2

好,每串開始與string.Empty,所以如果mothersLast == string.Empty你沒有做任何更多的工作。只是簡化您的查詢:

results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && 
          r.MothersLast.StartsWith(mothersLast)).ToList(); 
0
results = results.Where(r => r.FathersLast.StartsWith(fathersLast) && (mothersLast == string.Empty || r.MothersLast.StartsWith(mothersLast))).ToList(); 
1

爲什麼檢查mothersLaststring.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()兩次是不必要的,你可以圍繞這些代碼,但我會根據留給取決於你如何大名單是。