3

我有实体类型、主键名称和主 ID 的 Guid。我想在 LinqToSql 中获取此类 Id 的元素。

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

我想我需要自己生成那个表达式,但我不知道如何:(

4

2 回答 2

1

http://blog.dynback.com/index.php/2008/11/architecture/database/repository-in-linq-to-sql-getbyid-part/

调查结果!看一看!

于 2008-11-28T17:54:30.197 回答
0

我期待着,在搜索编译器代码生成之后,在 Reflector 中我发现了这个 lambda 的创建。

    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 Yabeda.Med.Mvc

找不到此错误的含义!

于 2008-11-27T13:00:34.733 回答