Pseduocode:
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;
}
我知道还有其他方法可以解决这个问题(即只过滤两次列表),我只是很好奇。
答案 0 :(得分: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;