2016-02-25 57 views
0

Pseduocode:是否可以编辑或扩展作为参数传递的linq表达式?

var pocos = GetPOCOs(p => !p.IsDeleted); 

public List<MyPoco> GetPOCOs(Expression<Func<MyPoco, bool>> exp) 
{ 
    List<MyPoco> pocos = new List<MyPoco>(); 

    foreach (int i in MyListOfIntegers) 
    { 
     // this will not compile - but is a similar function possible? 
     pocos.AddRange(GetPocos().Where(exp && p => p.PocoId == i)); 
    } 

    return pocos; 
} 

我知道有其他的方式,我可以去这个(即只过滤列表两次),我只是好奇。

+1

http://www.albahari.com/nutshell/predicatebuilder.aspx –

回答

1

当我需要操作条件时,我尽量使用IQueryable,并在最后一刻实现它。我用这个当创建报告在我的应用程序(基于用户的输入添加不同的过滤器。)

IQueryable<MyObj> qry = MyDAL.GetObjs(); 

if (someCond) { 
    qry = qry.Where(p => p.SomeCond == someValue); 
} 

if (someOtherCond) { 
    qry = qry.Where(p => someCollection.Contains(p.SomeValue)); 
} 

return qry; 
相关问题