включение «автономного» кода в скомпилированные запросы

Что происходит за кулисами, когда я включаю функцию в свой скомпилированный запрос, как я это делаю с 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.

Он работает без проблем, но я не понимаю, как и почему. Что именно там происходит?

6
задан magnattic 7 April 2011 в 14:16
поделиться