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

时间:2016-02-25 17:08:43

标签: c# linq

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;
}

我知道还有其他方法可以解决这个问题(即只过滤两次列表),我只是很好奇。

1 个答案:

答案 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;