使用反射信息生成 lambda

发布于 2024-07-09 22:50:03 字数 179 浏览 2 评论 0原文

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

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

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

I have Enitity Type, Name of Primary Key and Guid of Primary Id. I want to get element of such Id in LinqToSql.

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

I think I need to generate that Expression myself, but I dont know how :(

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假面具 2024-07-16 22:50:04

我期待着,在搜索编译器生成的代码后,在 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

找不到此错误的含义!

I look forward, and after searching through generated by compiler code, in Reflector I found this creation of 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);
    }

The thing what I need, but I have compiler exception:

Error 5 The type arguments for method
'System.Linq.Enumerable.Single(System.Collections.Generic.IEnumerable,
System.Func)' cannot be
inferred from the usage. Try
specifying the type arguments
explicitly. D:\Projects\Own\Yabeda\Source\trunk\med\Yabeda.Med.Mvc\Data\Oper.cs 48 20 Yabeda.Med.Mvc

Can't find what this Error means!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文