当我在编译的查询中包含一个函数时,幕后会发生什么,就像我在这里使用 DataConvert.ToThema() 将表对象转换为我的自定义业务对象一样:
public static class Queries
{
public static Func<MyDataContext, string, Thema> GetThemaByTitle
{
get
{
var func = CompiledQuery.Compile(
(MyDataContext db, string title) =>
(from th in elan.tbl_Thema
where th.Titel == title
select DataConvert.ToThema(th)).Single()
);
return func;
}
}
}
public static class DataConvert
{
public static Thema ToThema(tbl_Thema tblThema)
{
Thema thema = new Thema();
thema.ID = tblThema.ThemaID;
thema.Titel = tblThema.Titel;
// and some other stuff
return thema;
}
}
并这样称呼它
Thema th = Queries.GetThemaByTitle.Invoke(db, "someTitle");
显然该函数没有翻译成 SQL 或其他东西(怎么可能),但是当我在 VS2010 中设置断点时它也不成立。
它可以正常工作,但我不明白如何或为什么。那里究竟发生了什么?