首页 > 后端开发 > C++ > 动态LINQ如何在C#中启用动态列选择?

动态LINQ如何在C#中启用动态列选择?

DDD
发布: 2025-01-28 20:06:11
原创
830 人浏览过

How Can Dynamic LINQ Enable Dynamic Column Selection in C#?

C#动态LINQ:实现动态列选择

考虑以下包含多个字段的Data类:

<code class="language-csharp">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; }
}</code>
登录后复制

假设您想从Data对象的列表中动态选择特定的列,例如,只检索Field1和Field2。在编译时不知道所选字段并且必须在运行时指定这些字段的场景中,使用动态LINQ是一种有效的方法。

为了动态实现这一点,我们可以动态创建一个lambda表达式:

<code class="language-csharp">Func<Data, Data> CreateNewStatement(string fields)
{
    // 输入参数 "o"
    var xParameter = Expression.Parameter(typeof(Data), "o");

    // 新语句 "new Data()"
    var xNew = Expression.New(typeof(Data));

    // 创建初始化器
    var bindings = fields.Split(',').Select(o => o.Trim()).Select(o => {

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

        // 原始值 "o.Field1"
        var xOriginal = Expression.Property(xParameter, mi);

        // 设置值 "Field1 = o.Field1"
        return Expression.Bind(mi, xOriginal);
    });

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

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

    // 编译为 Func<Data, Data>
    return lambda.Compile();
}</code>
登录后复制

此方法接受所需字段名称的字符串作为输入,并返回一个Func<Data, Data> lambda表达式。该lambda表达式动态创建一个具有指定字段值的新Data对象,从而选择这些字段。

使用此方法,我们可以像这样从Data列表中选择特定列:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
登录后复制

即使在编译时不知道所选字段,这也能为在LINQ查询中选择列提供动态且灵活的解决方案。

以上是动态LINQ如何在C#中启用动态列选择?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板