”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在LINQ查询中动态选择列?

如何在LINQ查询中动态选择列?

发布于2025-02-26
浏览:470

How Can I Dynamically Select Columns in LINQ Queries?

LINQ中的动态列选择

当列在编译时未知时,动态选择LINQ查询中的特定列可能具有挑战性。但是,有一种解决方案涉及动态创建传递给Select的lambda表达式。

考虑以下Data类:

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; }
}

为了动态选择特定列,您可以使用CreateNewStatement方法动态创建lambda表达式:

private Func CreateNewStatement(string fields)
{
    var xParameter = Expression.Parameter(typeof(Data), "o");
    var xNew = Expression.New(typeof(Data));

    var bindings = fields.Split(',')
        .Select(o => o.Trim())
        .Select(o =>
        {
            var mi = typeof(Data).GetProperty(o);
            var xOriginal = Expression.Property(xParameter, mi);
            return Expression.Bind(mi, xOriginal);
        });

    var xInit = Expression.MemberInit(xNew, bindings);
    var lambda = Expression.Lambda>(xInit, xParameter);
    return lambda.Compile();
}

此方法将逗号分隔的字段列表作为字符串,并动态生成一个lambda表达式,该表达式使用指定的字段初始化一个新的Data对象。

然后,您可以使用CreateNewStatement方法创建lambda表达式并将其传递给Select:

var result = list.Select(CreateNewStatement("Field1, Field2"));

这将返回一个具有指定字段填充的Data对象的序列。请注意,此技术适用于在编译时未知所选字段的情况。如果所选字段是静态的,则使用常规lambda表达式或基于反射的方法效率更高。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3