如果我使用如下的lambda表达式
// assume sch_id is a property of the entity Schedules
public void GetRecord(int id)
{
_myentity.Schedules.Where(x => x.sch_id == id));
}
Run Code Online (Sandbox Code Playgroud)
我假设(虽然没有经过测试)我可以使用匿名内联函数重写它,使用类似的东西
_jve.Schedules.Where(delegate(Models.Schedules x) { return x.sch_id == id; });
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何在普通(非内联)函数中重写它并仍然传入id参数.
简短的回答是你无法使它成为一个独立的功能.在您的示例中,id实际上是保存在闭包中.
答案很长,就是你可以通过用id你想要操作的值初始化它来编写一个捕获状态的类,并将其存储为成员变量.在内部,闭包操作类似 - 不同之处在于它们实际上捕获对变量的引用而不是它的副本.这意味着闭包可以"看到"它们绑定的变量的变化.有关详细信息,请参阅上面的链接.
所以,例如:
public class IdSearcher
{
private int m_Id; // captures the state...
public IdSearcher( int id ) { m_Id = id; }
public bool TestForId( in otherID ) { return m_Id == otherID; }
}
// other code somewhere...
public void GetRecord(int id)
{
var srchr = new IdSearcher( id );
_myentity.Schedules.Where( srchr.TestForId );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |