C# 在查询内部和外部使用Linq表达式对象

C# 在查询内部和外部使用Linq表达式对象,c#,linq,C#,Linq,我试图接受一个Func作为函数的参数,然后在Linq查询内外使用它 这里,idSelector是某种类型的Func,它将在事务对象中返回特定的子分类账id(例如t=>t.subgradger1) 公共类事务{ 公共int subdger1{get;set;} public int subdger2{get;set;} public int subdger3{get;set;} 公共十进制余额{get;set;} } 公共IEnumerable GetSubgradger(日期时间开始日期,函数I

我试图接受一个
Func
作为函数的参数,然后在Linq查询内外使用它

这里,
idSelector
是某种类型的
Func
,它将在
事务
对象中返回特定的子分类账id(例如
t=>t.subgradger1

公共类事务{
公共int subdger1{get;set;}
public int subdger2{get;set;}
public int subdger3{get;set;}
公共十进制余额{get;set;}
}
公共IEnumerable GetSubgradger(日期时间开始日期,函数ID选择器){
//简单地返回所有的IQueryable
DbSet txns=txnRepo.GetAll();
//获取每个明细分类账的期初余额
var子分类账=txns.其中(t=>t.日期<起始日期)
.GroupBy(idSelector,t=>t,(id,txn)=>new{id=id,Balance=txn.Sum(t=>t.Amount)})
.ToDictionary(t=>t.ID,t=>t.Balance);
//填写运行平衡表
var filtered=txns.Where(t=>t.Date>=StartDate.ToList();
foreach(过滤后的变量t)
{
t、 余额=次级账款[idSelector.Invoke(t)]。余额+=t.金额;
}
返回过滤;
}
我需要在两个位置使用
idSelector
:首先在Linq查询中将所有事务分组到
子分类账中,然后在过滤结果中获取特定子分类账的运行余额。我意识到Linq需要一个
表达式
,但我不太清楚如何在第二个上下文中调用它


我可能是走错了路,还有别的办法吗?这个问题也可能有点混乱,我确实尽可能减少了代码示例,因此如果有什么不清楚的地方,请询问我。

使用
Compile
从表达式中获取可调用的方法:

t.Balance = subLedgers[idSelector.Compile()(t)].Balance += t.Amount;

(假设idSelector是一个
表达式

我会将编译后的方法存储在局部变量中,这样您只需编译一次。啊,谢谢。第二条语句的语法真的让我难堪(用谷歌搜索Linq表达式是很棘手的!)@TimS。我也听从了你的建议。谢谢
t.Balance = subLedgers[idSelector.Compile()(t)].Balance += t.Amount;