从 BlToolkit LINQ 中提取表达式,以便对其进行编译

本文关键字:编译 LINQ BlToolkit 提取 表达式 | 更新日期: 2023-09-27 17:56:30

我试图提取这个表达式:

t => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart

进入称为表达式的外部变量。

我希望它以某种方式提取它,以便我可以在下一个 BlToolkit LINQ 查询中使用此变量。

private void InsertOrUpdate(IQueryable<CccPricingPricedDays> source, Table<CccPricingPricedDays> target)
    {
        Expression<Func<CccPricingPricedDays,CccPricingPricedDays, bool>> expression = (s,t) => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart;
        //doplneni chybejicich
        source.Where(s => !target.Any(t => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart))
              .Insert(target, table => table);
    }

我可以找到一种方法来插入变量以便对其进行编译。

从 BlToolkit LINQ 中提取表达式,以便对其进行编译

如果你想在 Linq 中重用表达式,你可能想看看 LinqKit。它会进入表达式内部,并在 sql 转换之前用它们的内容替换所有函数调用。

例如:

private void InsertOrUpdate(IQueryable<CccPricingPricedDays> source, Table<CccPricingPricedDays> target)
{
    Expression<Func<CccPricingPricedDays,CccPricingPricedDays, bool>> expression = (s,t) => t.DayEnd == s.DayEnd && t.DayStart == s.DayStart;
    source
          .AsExpandable()
          .Where(s => !target.Any(t => expression(s, t)))
          .Insert(target, table => table);
}