c# - 表达式匿名类型
问题描述
寻找一种在表达式树中访问匿名对象的属性和值的方法。最终,通过匿名对象传递的键/值对将用作字符串。我找到了如何访问关键部分,但我无法找到价值部分。
用法是:
object.ExpressionBuilder<Company>(dc => new { DCCODE = dc.CompanyCode })
方法是:
ExpressionBuilder<T>(Expression<Func<T, object>> expr)
{
var propertyName = expr.Body.Type.GetProperties()[0].Name; //this gets "DCCODE" as a string
var valueName = "dc.CompanyCode"; //looking for a way to get the matching value as either "CompanyCode" or "dc.CompanyCode"
}
解决方案
注意:我不能保证这总是正确的,因为顺序可能会有所不同,应该查看源代码来确定这一点。然而,这玩起来很有趣。
var body = (NewExpression)expr.Body;
var zipped = body.Members.Zip(body.Arguments, (member, argument) => new KeyValuePair<MemberInfo, MemberExpression>(member, argument));
foreach (var zip in zipped)
{
Console.WriteLine("Property name: {0}, property argument: {1}", zip.Key.Name, zip.Value.ToString());
}
这将打印:
属性名称:DCODE,属性参数:dc.CompanyCode
推荐阅读
- javascript - Yarn Start 无法生成 CRKA 项目
- sql - 查询结果到 temp,然后移动到 mast 表
- batch-file - 如何创建可以从一组存根创建 .jar 文件的批处理脚本?
- node.js - EventStreams (SSE) - 向客户端广播更新。可能吗?
- html - 在css中如何在一个div之间居中一个div而不触及父div的属性,只改变子div的属性
- recommendation-engine - 什么时候使用用户-用户协同过滤,什么时候使用Item-Item协同过滤?
- woocommerce - 如何编写一个 foreach 循环来检查用户在 Woocommerce 中购买特定商品的次数?
- ssl-certificate - 如何使用 Selenium ChromeDriver 解决无效证书错误?
- javascript - Jquery mouseover 重新排列 div 中的类,然后用 mouseleave 重置
- google-apps-script - 谷歌脚本循环问题