2012-12-27 44 views
0

我怎麼能簡化這樣的表述:簡化if語句

var someList = new List<someType>(); 

    if (String.IsNullOrEmpty(groupId)) 
    { 
     someList = CTX.Values.Include(c => c.Customer).ToList(); 
    } 
    else 
    { 
     someList = CTX.Values.Include(c => c.Customer).Where(c => c.GroupId== groupId).ToList(); 

    } 

的差異只在.Where(c => c.GroupId== groupId)。查詢語句中是否可以包含條件String.IsNullOrEmpty(groupId)

+0

我刪除了我的答覆,因爲我不認爲你應該 '簡化' 吧。你的代碼比已發佈的代碼更容易理解(包括我的代碼)。 –

+0

作爲旁註:我會替換'var someList = new List ();''List someList;',因爲該值不會被使用。 – CodesInChaos

+0

@MichaelViktorStarberg你的答案的主要問題不是它很難閱讀,但它是錯誤的。 – CodesInChaos

回答

7

您可以構建在多個步驟查詢。只有在groupId不爲空時,只需添加Where部件即可。

查詢只有在您致電ToList()後纔會執行。

var values = CTX.Values.Include(c => c.Customer); 

if(!String.IsNullOrEmpty(groupId)) 
    values = values.Where(c => c.GroupId == groupId); 

someList = values.ToList(); 
+1

+1我更喜歡這種方法,它更易讀IMO。 – digEmAll

+0

是的,這是最可讀性和實現主要目標! – Anelook

3

也許這樣?

someList = CTX.Values.Include(c => c.Customer) 
     .Where(c => String.IsNullOrEmpty(groupId) 
        || c.GroupId== groupId) 
     .ToList(); 

編輯者:PLB REQUEST :)

bool isGroupValid = String.IsNullOrEmpty(groupId); 
someList = CTX.Values.Include(c => c.Customer) 
     .Where(c => isGroupValid 
       || c.GroupId== groupId) 
     .ToList(); 
+0

_注意:_'groupId'將在每次迭代時檢查它是否爲null或空字符串(我知道如果這是一個瓶頸問題,則會有更大的問題;))。 – Leri

+0

@PLB這只是個想法。這很容易重構,以避免瓶頸:) –

0

您可以添加:

.Where(c => String.IsNullOrEmpty(groupId)) 

即:

CTX.Values.Include(c => c.Customer) 
    .Where(c => c.GroupId == groupId || c => String.IsNullOrEmpty(groupId)) 
    .ToList();