Генерация лямбда с отражением информации - PullRequest
3 голосов
/ 26 ноября 2008

У меня есть Тип Enitity, Имя Первичного Ключа и Guid of Primary Id. Я хочу получить элемент такого идентификатора в LinqToSql.

model.GetTable<T>().Where(t => here equality  );

Думаю, мне нужно сгенерировать это выражение самостоятельно, но я не знаю, как: (

Ответы [ 2 ]

1 голос
/ 28 ноября 2008
0 голосов
/ 27 ноября 2008

Я с нетерпением жду, и после поиска сгенерированного кода компилятора, в Reflector я нашел это лямбда-создание.

    public static T GetById(Guid id)
    {
        Type entType = typeof(T);

        if (!CheckTable(entType)) {
            throw new TypeLoadException(string.Format(
                "{0} is not Table Entity, has no attribute Table", entType.FullName));
        }

        string property = GetPrimaryKeyName(entType).Name;

        ParameterExpression cs;
        var lambda = Expression.Lambda<Func<Personal, bool>>(
                Expression.Equal(
                        Expression.Property(
                                cs = Expression.Parameter(typeof(T), "p"), 
                                entType.GetProperty(property).GetGetMethod()
                        ), 
                        Expression.Constant(id), 
                        false, 
                        typeof(Guid).GetMethod("Equals")
                ), new ParameterExpression[] { cs }
        );

        return Connection.Model.GetTable<T>().Single(lambda);
    }

То, что мне нужно, но у меня есть исключение компилятора:

Ошибка 5 Аргументы типа для метода «System.Linq.Enumerable.Single (System.Collections.Generic.IEnumerable, System.Func) 'не может быть вывод из использования. Пытаться указание аргументов типа в явном виде. D: \ Projects \ Own \ Yabeda \ Source \ trunk \ med \ Yabeda.Med.Mvc \ Data \ Oper.cs 48 20 Ябеда.Med.Mvc

Не могу найти, что означает эта ошибка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...