从BlToolkit LINQ中提取表达式,以便可以编译它

时间:2014-04-03 14:35:37

标签: c# linq expression bltoolkit

我试图提取这个表达式:

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

我可以找到一种方法来插入变量,以便编译它。

1 个答案:

答案 0 :(得分:0)

如果要在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);
}