LINQ:动态选择

2023-12-14

考虑我们有这个类:

    public  class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }
    public string Field4 { get; set; }
    public string Field5 { get; set; }

}

如何动态选择指定列?像这样的东西:

  var list = new List<Data>();

  var result= list.Select("Field1,Field2"); // How ?

这是唯一的解决方案=>动态LINQ ?
所选字段在编译时未知。它们将在运行时指定


您可以通过动态创建传递给的 lambda 来做到这一点Select:

Func<Data,Data> CreateNewStatement( string fields )
{
    // input parameter "o"
    var xParameter = Expression.Parameter( typeof( Data ), "o" );

    // new statement "new Data()"
    var xNew = Expression.New( typeof( Data ) );

    // create initializers
    var bindings = fields.Split( ',' ).Select( o => o.Trim() )
        .Select( o => {

            // property "Field1"
            var mi = typeof( Data ).GetProperty( o );

            // original value "o.Field1"
            var xOriginal = Expression.Property( xParameter, mi );

            // set value "Field1 = o.Field1"
            return Expression.Bind( mi, xOriginal );
        }
    );

    // initialization "new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var xInit = Expression.MemberInit( xNew, bindings );

    // expression "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var lambda = Expression.Lambda<Func<Data,Data>>( xInit, xParameter );

    // compile to Func<Data, Data>
    return lambda.Compile();
}

然后你可以像这样使用它:

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

LINQ:动态选择 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 如何从非托管代码使用托管代码?

    如何从本机 C 非托管代码 调用 NET 代码 我想将 NET 代码公开给我的非托管 C 应用程序 然后使用它们 更具体地说 我想从本机 C 调用 C 我知道有很多方法 但你能告诉我每种方法的优缺点吗 顺便问一下 我不想使用 COM 那么现
  • 去除空格/制表符/换行符 - python

    我正在尝试删除 Linux 上 python 2 7 中的所有空格 制表符 换行符 我写了这个 应该可以完成这项工作 myString I want to Remove all white t spaces new lines n and
  • 尝试对 Django 应用进行 dockerize,Docker 找不到 ft2build.h

    我是 Docker 新手 我正在尝试对 Django 应用程序进行 dockerize 但是当我运行时docker build t sometag 我收到以下错误 9 23 05 Preparing metadata setup py st
  • 接收离线消息mqtt

    我使用 mosquitto 作为代理 使用 paho python 作为客户端 我正在尝试让订阅者接收离线消息 为此我做了以下更改 固定客户端 ID 服务质量级别 2 但是 订阅者仍然无法接收消息 有什么帮助吗 谢谢 拉胡尔 为了让您的客户
  • R 中的分层对数秩检验用于计算流程表单数据?

    背景 在 4 年的半年随访时间中 患者可能会切换到不同的药物组 为了解决这个问题 我将生存数据转换为计数过程形式 我想比较药物组 A B 和 C 的生存曲线 我正在使用扩展的 Cox 模型 但想要对每个风险函数进行成对比较或进行分层对数秩检
  • 在 R 中为 xml2::xml_text() 设置 XML_PARSE_HUGE 选项

    我读过这个问题在 R 中解析 XML 文件 gt 1 MB 这个答案似乎只适用于原来的XMLR 中的包 如何设置此选项xml2 这是我正在运行的代码 library xml2 library magrittr rawXML lt read
  • 我需要为特定的用户代理编写一个网络爬虫

    我需要编写一个网络爬虫 并且希望能够使用已知的用户代理进行爬网 例如 我希望我的爬虫充当iphone来爬取某个网站的移动站点 然后使用Mozilla PC代理再次爬取 等等 这样 我就能够抓取每种 类型 的网站 移动和 PC 但是 我还希望
  • C#中有“之间”函数吗?

    谷歌不明白 Between 是我正在寻找的函数的名称 并且没有返回任何相关内容 例如 我想仅通过一次操作检查 5 是否在 0 到 10 之间 目前尚不清楚 一次操作 是什么意思 但是不 我知道没有运算符 框架方法来确定某个项目是否在范围内
  • equals 方法适用于对象吗?如果是这样,怎么办?

    我有一个动物园程序 动物园里有爬行动物的分支动物亚群 当我执行 equals 方法时 主程序将编译并运行 我很困惑 如果我比较对象而不是专门比较 int 或 String java 如何知道使用 equals 方法 public class
  • 在Android中启动Activity清除顶部

    我的堆栈中有以下活动 A B C D 我想重新启动 B 以获得此堆栈 A B 其中 B 是一个新的 B 实例 不是接收 onNewIntent 回调的旧实例 我该怎么做 顺便说一句 我正在使用 intent setFlags Intent
  • 某些项目无法导入,因为它们已存在于 Eclipse 中的工作区错误

    我正在尝试导入我和我的同事一直在处理的项目 并在选择 导入 然后 导入现有项目 然后单击存档文件 然后单击下一步后不断收到此错误 出现这个错误 有些项目无法导入 因为它们已经存在于 工作区 取消选中 将项目复制到工作区 复选框 然后单击 刷
  • PresentModalViewController:animated 上的不同转换:

    我提出了一个模态视图控制器 它是一个标签栏控制器 里面有一个导航控制器 问题是我的第一个视图有黑色背景 我希望新视图有白色背景 这意味着我要么必须拥有具有透明背景的模态视图控制器 直到其显示白色背景时完成 向上滑动 动画 要么我必须将导航控
  • C# 中#region 和#endregion 有什么用?

    给我一个例子 如果我使用或不使用这个块 我可以实现什么目标 起始区域后面的名称有什么用 region MyClass definition Some code endregion 没有 技术 理由使用 Region 它唯一做的就是提供一种折
  • Java SGML 到 XML 的转换?

    有谁知道将 SGML 转换为 XML 的方法或库 编辑 为了澄清 我必须在 Java 中进行转换 并且我不能使用 SP 解析器或相关的 SX 工具 似乎普遍的共识是 没有现有的库可以在 Java 中执行 SGML 工作 当然 经过几天毫无结
  • 为什么我们不能在 setTimeout 上调用并应用?

    为什么我们不能调用并应用 setTimeout var obj window setTimeout call obj callback delay it throws error stating illegal invocation 使用起
  • 致命:此操作必须在工作树中运行[重复]

    这个问题在这里已经有答案了 当我尝试更改分支时出现此错误 也许我会在以下位置提供一些命令信息 path to git repo 根据命令 git branch 我得到以下输出 V1 5 V2 0 master 当我尝试命令时 git che
  • PHP自动下载文件而不提示保存或打开文件

    我有一个函数 用于从非公共目录下载文件 下载部分工作正常 只是它之前没有提示用户并允许用户选择位置或只是简单的打开 我使用以下代码 file L APP BILAGOR GET f finfo new finfo FILEINFO MIME
  • 如何从命令行覆盖 `project.build.finalName` Maven 属性?

    我有以下由 Maven 3 0 4 运行的普通 pom
  • 当使用 JSch 通过 Java 执行时,即使启用了 setPty,某些 Unix 命令也会失败并显示“...未找到”

    我正在创建一个 Android 应用程序 它将命令发送到设备上的 Linux 终端 使用 ls 命令时我能够获得正确的输出 但是当我使用 ifconfig 或 iwconfig 时设备不会给我任何输出 使用 Tera Term 我已经验证这
  • LINQ:动态选择

    考虑我们有这个类 public class Data public string Field1 get set public string Field2 get set public string Field3 get set public