如何设置属性选择器的值 Expression>

2024-05-03

我需要使用模式工厂的想法将 Person 类实体中的实体属性 Address 与 FactoryEntities 类中的表达式 linq 相关联,看看这就是我所拥有的并且我想要做的:

Address address = new Address();
address.Country = "Chile";
address.City = "Santiago";
address.ZipCode = "43532";
//Factory instance creation object
//This is idea
Person person = new FactoryEntity<Person>().AssociateWithEntity(p=>p.Address, address);

public class Person: Entity
{
    public string Name{ get; set; }
    public string LastName{ get; set; }
    public Address Address{ get; set; }
}

public class Address: Entity
{
    public string Country{ get; set; }
    public string City{ get; set; }
    public string ZipCode{ get; set; }
}

public class FactoryEntity<TEntity> where TEntity : Entity
{
    public void AssociateWithEntity<TProperty>(Expression<Func<TEntity, TProperty>> entityExpression, TProperty newValueEntity) where TProperty : Entity
    {
        if (instanceEntity == null || instanceEntity.IsTransient())
            throw new ArgumentNullException();

        /*TODO: Logic the association and validation 
        How set the newValueEntity into the property of entityExpression (x=>x.Direccion = direccion*/
    }
}

这有效:

以下辅助方法将 getter 表达式转换为 setter 委托。如果您想退货Expression<Action<T,TProperty>>而不是Action<T,TProperty>,只是不要调用Compile()方法在最后。

Note:代码来自 Ian Mercer 的博客:http://blog.abodit.com/2011/09/convert-a-property-getter-to-a-setter/ http://blog.abodit.com/2011/09/convert-a-property-getter-to-a-setter/

    /// <summary>
    /// Convert a lambda expression for a getter into a setter
    /// </summary>
    public static Action<T, TProperty> GetSetter<T, TProperty>(Expression<Func<T, TProperty>> expression)
    {
        var memberExpression = (MemberExpression)expression.Body;
        var property = (PropertyInfo)memberExpression.Member;
        var setMethod = property.GetSetMethod();

        var parameterT = Expression.Parameter(typeof(T), "x");
        var parameterTProperty = Expression.Parameter(typeof(TProperty), "y");

        var newExpression =
            Expression.Lambda<Action<T, TProperty>>(
                Expression.Call(parameterT, setMethod, parameterTProperty),
                parameterT,
                parameterTProperty
            );

        return newExpression.Compile();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置属性选择器的值 Expression> 的相关文章

随机推荐

  • Angular UI-Router 的“ui-sref”未按预期工作

    如果我使用 href UI Router 将按预期工作 但是 如果我使用 ui sref 它不会按预期工作 我对以下示例有两个问题 锚点 link series 2 no param 和 link series 2 one param 不会
  • 如何使用 Powershell 查找组成员身份以包括嵌套组的成员并包括父组的名称

    我正在尝试创建一个组中所有用户的 CSV 以包含嵌套组的成员 并映射每个成员所在的组 我发现以下 powershell 命令几乎可以完成此任务 但我还需要知道嵌套组的每个成员的嵌套组的名称 MembersALL MembersRecursi
  • Android:RunOnUiThread 与 AsyncTask

    我相信 Google 建议开发人员使用 AsyncTask 但是 我想知道它与使用 new Thread 然后调用 RunOnUiThread 在性能和内存效率方面有何不同 使用 RunOnUithread 的示例 some code 1
  • 如何将 CSS 样式应用于四开输出

    我想将样式应用于四开块输出 我做的第一件事就是在类中嵌入一些 CSS 属性 output在四开文档中 然后使用以下内容引用它 r class output output 它有效 但我认为它不是很有效 因为我必须在每个文档中编写它 所以我写了
  • 基于邻近度的负载均衡

    我正在开展一个项目 我们在世界各地拥有大量 目前为 5 台 服务器 客户端通过集中式代理连接到其中一台服务器 我们知道客户的原籍国 但除此之外一无所知 我们完全控制服务器 因此我们可以获得所需的所有信息 我们不控制客户 他们必须按照标准通过
  • spring 调度一个具有固定延迟和初始延迟的作业

    我正在尝试安排方法调用 我想在服务器启动后立即安排此方法调用 然后每 30 秒调用一次 下面的代码 Configuration EnableScheduling EnableTransactionManagement public clas
  • 如何使用IIS压缩所有文件

    IIS compression has been enabled 以下是web config的http压缩标签
  • Symfony 2 登录后重定向

    在 Symfony 2 中 您可以设置注销目标 以便注销后您将被重定向到 main 但是 登录后您将被重定向到 有没有办法为 成功 登录设置目标 firewalls dev pattern profiler wdt css images j
  • 如何在数据流中正确使用“展平”

    我们的管道如下所示 GCS gz 压缩文件 gt ParDo gt BigQuery 我想使用 展平 从 GCS 中提取多个文件作为管道的输入 但它一直因错误而烦恼 Workflow failed Causes 5001e5764f46ac
  • Rails 形式的当前日期

    我正在学习 Rails 并在书外进行一些探索 并随着知识的增长创建一个具有附加功能的简单应用程序 我正在编写一个简单的博客应用程序 我在表单中添加了一个名为 日期 的字段 我不希望这是一个字段 我希望它从服务器获取日期并将其自动放入数据库中
  • iPhone - 让 VoiceOver 宣布标签文本更改

    如果标签上的文本发生更改 是否可以使用 iPhone 上的 VoiceOver 来宣布更新后的文本 这类似于 ARIA 中的实时区域 Thanks 您可以使用 VoiceOver 朗读您喜欢的任何文本 UIAccessibilityPost
  • 如何保存我更改的网格中的行

    我使用 ng resource 从服务器获取数据 然后将数据放入表格网格中 如下所示 div div
  • JObject ToString 与 StringEnumConverter 不起作用

    我正在尝试序列化一个匿名类 如下所示 public enum ErrorCode A B C var response JObject FromObject new Error new Message Test Code ErrorCode
  • 无法更改 Visual Studio 2013 中的字体

    我曾经可以通过以下方式更改 Visual Studio 2013 的字体和颜色Tools gt Options then Environment gt Fonts and Colors 最后显示文本编辑器的设置 但是 现在我无法显示文本编辑
  • 使用 Tiny Scrollbar 自动滚动到 div 底部

    我正在编写一个shoutbox 并使其尽可能用户友好 它使用微型滚动条插件 http plugins jquery com project tinyscrollbar对于 jQuery 我想合并一个额外的函数 让我可以让它到达底部div 它
  • 如何仅使用 Javascript 减慢平滑滚动的默认速度?

    我的目标是按回车键 然后让网站滚动到底部 我已将滚动行为设置为平滑 一切都正常工作 除了平滑滚动的默认速度太快了 我怎样才能减慢它的速度 下面是我的代码 请不要使用jquery 谢谢你 document body onkeyup funct
  • 我可以通过索引访问 Parquet 文件而不将整个文件读入内存吗?

    我刚刚读到 HDF5 允许您访问数据查找 而无需将整个文件读入内存 这种寻找行为在没有 Java 的 Parquet 文件中是否可能 非 pyspark 解决方案 我使用 Parquet 是因为它有强大的 dtype 支持 import h
  • 类型错误:req.logIn 不是函数 - Passport JS

    我很确定这不是一个错误 因为谷歌搜索没有发现任何结果 我正在使用 Passport JS 和本地策略 在我的登录路线上 我使用自定义回调 并在确定用户存在后调用 req login 因为文档显示 请注意 当使用自定义 回调 应用程序有责任建
  • 如何在外部浏览器中打开 Android 应用程序中的链接?

    任何人都可以帮助我在代码中打开外部浏览器或其他 Android 应用程序中的链接吗 现在的情况是链接在应用程序本身中打开 但如果该链接属于 Android 应用程序 则无法打开 它显示安装 Android 应用程序 所以我希望如果链接可以在
  • 如何设置属性选择器的值 Expression>

    我需要使用模式工厂的想法将 Person 类实体中的实体属性 Address 与 FactoryEntities 类中的表达式 linq 相关联 看看这就是我所拥有的并且我想要做的 Address address new Address a