我试图提取这个表达式:
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);
}
我可以找到一种方法来插入变量以便对其进行编译。
如果你想在 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);
}