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

本文关键字:参数传递 linq 表达式 编辑 是否 | 更新日期: 2023-09-27 18:36:16

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

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

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

当我需要操纵条件时,我只是尽可能使用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;