如何从名称的 string[] 创建动态 LINQ 选择投影函数?

2023-11-26

使用 C#...

有没有办法指定投影函数的属性名称LINQselect 方法,从数组中。

public class Album
{
    public int Id { get; set; }
    public string Name { get; set; }
    public short Rate { get; set; }
    public string Genre { get; set; }
    public short Tracks { get; set; }
}

public class Class1
{
    private void Some<T>()
    {
        // Example of source
        var names = new[] { "Id", "Name", "Tracks" };

        var query = myDataContext.
                    GetTable<T>.
                    AsQueryable().
                    Select( /* dynamic projection from names array */ );

                    // something like
                    // Select(x => new
                    //     {
                    //         x.Id,
                    //         x.Name,
                    //         x.Tracks
                    //     }

        GoAndDoSomethingWith(query);
    }
}

这可以在没有System.Linq.Dynamic?


您可以使用反射和动态类型来生成仅具有指定字段/属性的对象。

下面是执行此操作的简单方法。您可以进行优化,例如为反射提供类型缓存。但这应该适用于简单的字段/属性。

public static object DynamicProjection(object input, IEnumerable<string> properties)
{
    var type = input.GetType();
    dynamic dObject = new ExpandoObject();
    var dDict = dObject as IDictionary<string, object>;

    foreach (var p in properties)
    {
        var field = type.GetField(p);
        if (field != null)
            dDict [p] = field.GetValue(input);

        var prop = type.GetProperty(p);
        if (prop != null && prop.GetIndexParameters().Length == 0)
            dDict[p] = prop.GetValue(input, null);
    }

    return dObject;
}

Usage:

//...
var names = new[] { "Id", "Name", "Tracks" };
var projection = collection.Select(x => DynamicProjection(x, names));
//...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从名称的 string[] 创建动态 LINQ 选择投影函数? 的相关文章

  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • 我可以将 Must_use 应用于函数结果吗?

    我有一个函数返回一个f64 我想确保使用该函数的输出 而不是仅仅忽略它 有什么办法可以做到这一点吗 返回类型不用于错误处理 因此将其包装在Result or Option确实没有意义 我想要类似的东西 must use fn calcula
  • 两个 .net 程序集之间的循环引用

    我有两个程序集 A 和 B A 已存在对 B 的引用 并且必须保持这种状态 现在我对B做了一些修改 需要引用A 所以就出现了循环引用 一些细节 A 有一些属性网格 B 中的对话框需要托管这些属性网格 因此 为了避免这种循环引用问题 我尝试在
  • 交换字符串中的字母

    我需要按照以下规则交换字符串中的字母 A 被 T 取代 T 被替换为 A C 被 G 取代 G 被 C 取代 例如 ACGTA应该成为TGCAT 解决这个问题的最佳方法是什么 正在寻找java A to T T to A 找到了这个建议 S
  • 如何调试/记录 wsgi python 应用程序?

    我试过这个 usr bin python from wsgiref simple server import make server from cgi import parse qs escape import logging import
  • 为什么 object.__new__ 在这两种情况下工作方式不同?

    Python 版本 2 7 3 默认 2013 年 4 月 10 日 06 20 15 n GCC 4 6 3 我有这个 gt gt gt class testclass1 object pass gt gt gt class testcl
  • WPF:ContentPresenter 上的 TextTrimming

    有没有一种简单的方法可以让 TextTrimming 与 ContentPresenter 一起使用 我有 TextBlock 和 AccessText 的隐式样式 其中 TextTrimming 设置为 CharacterEllipsis
  • 具有特征的 Scala 和 Mockito

    我有一个简单的类 它自然地分为两部分 所以我重构为 class Refactored extends PartOne with PartTwo 然后单元测试开始失败 下面是重现该问题的尝试 所有三个示例的功能都是相同的 但第三个测试失败并出
  • 指向结构的指针的大小[重复]

    这个问题在这里已经有答案了 我试图记住 C 编程的基础知识 并且关于结构体指针 我正在执行以下操作 include
  • Google Apps 脚本国际化 (i18n)

    这些文档似乎没有提及任何内容 是否有关于如何在 Google Apps 脚本中执行 i18n 的推荐方法 尤其是作为 WebApp 发布的 有没有办法找出用户的区域设置 Session getActiveUserLocale 应返回区域设置
  • CodeIgniter POST/GET 默认值

    如果 POST GET 数据为空 假 我可以设置默认值吗 this gt input gt post varname value if falsy 所以我不必像这样编码 a this gt input gt post varname thi
  • 非 void 函数中的空返回是未定义的行为吗?

    阅读有关该主题的答案后控制到达非 void 函数的末尾我没有看到任何专门针对以空退出非 void 函数的情况的答案return陈述 int return integer return empty return in non void fun
  • 我想通过蓝牙设备强制打开键盘

    我有一个蓝牙条形码设备 如果将蓝牙设备连接到 iPhone 我无法使用 iPhone 键盘写任何内容 您已经知道iPhone键盘不会显示 因为蓝牙设备已识别键盘 但 当 iPhone 连接蓝牙设备时 我必须通过键盘在文本框中写入一些内容 请
  • 如何在 Windows 上正确地将拉丁字符打印到 C++ 控制台?

    我在用 C 将法语字符写入控制台时遇到问题 该字符串是从文件中加载的std ifstream and std getline然后使用打印到控制台std cout 以下是该字符串在文件中的内容 该链对应于代码 TEST CODE 并且与语言环
  • 为什么 Ruby 只允许某些运算符重载

    在 Ruby 中 与许多其他面向对象编程语言一样 运算符是可重载的 但是 只有某些字符运算符可以重载 此列表可能不完整 但以下是一些不能重载的运算符 not and or 吉姆 韦里奇
  • 如何将 PHP 的内存限制增加到 2GB 以上?

    我在增加 PHP 作为 Apache 模块的内存限制时遇到问题 如果我将以下指令放入 Apache 配置中 则可以正常工作 php value memory limit 1 99G 但是超过2GB就不行了 它把这个值恢复到128MB 这里有
  • Google Plus API 和照片?

    据我了解 没有官方的 G API 用于从相册中获取照片 但我已经弄清楚了hereGoogle Plus 在内部使用 Picasa 我的问题是 是否可以仅通过 G API Picasa userId 找出 如果是 如果我只有 Google P
  • XCTest 中的 IOS -NSRunLoop:如何让运行循环在单元测试中工作?

    好的 我环顾四周 没有找到我的问题的确切答案 我正在尝试在单元测试 而不是主要运行 中测试超时处理程序 问题似乎在于 NSRunLoop mainRunLoop 单元测试中的运行方式与标准运行中的运行方式不同 我以这种方式进行超时 NSTi
  • macOS/swift 使用 AVCaptureSession 捕获音频

    我目前正在尝试在我的 Mac 上实现一个简单的录音工具 由于我需要内存中的原始音频缓冲区 因此我无法使用 AVAudioRecorder 它只会将录音写入文件 我的方法是创建 AVCaptureSession 输入 麦克风 和输出 AVCa
  • 如何使用 Team Build 2010 部署 Windows 服务项目

    我有一个VS2010解决方案 其中包括几个Windows服务项目 我需要将这些服务部署为 Team Build 2010 中构建的一部分 并且 Windows 服务必须部署在多台 Windows Server 计算机上 我怎样才能做到这一点
  • 如何从名称的 string[] 创建动态 LINQ 选择投影函数?

    使用 C 有没有办法指定投影函数的属性名称LINQselect 方法 从数组中 public class Album public int Id get set public string Name get set public short