2012-12-27 97 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();