使用Linq构建动态匿名类型Select语句

时间:2013-06-26 11:37:17

标签: linq dynamic-linq

//list is IEnumeable NOT IEnumerable<T>

var IEnumerable<object> = list.AsQueryable().Cast<object>().Select(x=> .........);

对象实际上有一个基于匿名类的POCO,例如

AccountId,Name,SecretInfo

我在select语句中想要的是

AccountId = x.GetType().GetProperty("AccountId").GetValue(x,null),
Name = x.GetType().GetProperty("Name").GetValue(x,null)

此外,我想隐藏SecretInfo列,我可以将其作为硬编码字符串“SecretInfo”传递 基本上,选择列表需要在匿名类型上动态构建.... 怎么能这样做......任何Linq都会在那里帮助我?

1 个答案:

答案 0 :(得分:0)

您的问题的答案取决于anonymous types。您可以使用以下代码:

var result = list.AsQueryable().Cast<Info>().Select(x => new
    {
        AccountId = x.AccountId,
        Name = x.Name
    });

在select语句中跟随new关键字的括号之间,您将创建一个匿名类型,该类型将具有两个隐式类型的只读字段(AccountId和Name)。希望这有帮助!

我想从链接的(没有双关语)文章中发布这句话:

  

通常在查询表达式的select子句中使用匿名类型,以从源序列中的每个对象返回属性的子集。有关查询的详细信息,请参阅LINQ Query Expressions (C# Programming Guide)