2016-02-25 61 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; 
相關問題