为SELECT语句创建LINQ表达式

时间:2016-06-15 13:52:03

标签: c# entity-framework linq lambda expression-trees

我有这个LINQ查询,其中" new" 句子创建一个匿名类型

var query = from x in List
            select new {x.Field1, x.Field2};

如何动态构建LINQ表达式:

select new {x.Field1, x.Field2};

更多背景信息:

我们有一个List< Customer>客户拥有物业A,B,C,D,E,F,G。

我们有时只需返回一些属性:

第一次回电:

 select new {x.A, x.B}

第二次回电:

 select new {x.C, x.D}

返回是动态的!我在字符串数组中有属性的名称。

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您要检索的属性使用CSV。你应该能够使用它。

public static class ObjectExtensions
{
    public static Dictionary<string,object> GetProperties(this object obj, string properties)
    {
        var propertyNames = properties.Split(',');
        var result = new Dictionary<string, object>();
        var type = obj.GetType();
        foreach (var property in propertyNames)
        {
            var prop = type.GetProperty(property);
            var value = prop.GetValue(obj);
            result.Add(property, value);
        }
        return result;
    }
}

它将键值对存储在字典中

用法是。

 var result = list.Select(p => p.GetProperties("Field1,Field2"));
 JsonSerializer.CreateDefault().Serialize(Console.Out, result);