linq相当于'select*'sql的泛型函数?

Nic*_*ick 6 c# linq generics anonymous-types

我有一个泛型<>函数,它接受一个linq查询('items')并通过它枚举添加其他属性.如何选择原始"项目"的所有属性而不是项目本身(如下面的代码所示)?

所以相当于sql:select*,'bar'作为项目的Foo

foreach (var item in items)
{
    var newItem = new {
        item, // I'd like just the properties here, not the 'item' object!
        Foo = "bar"
    };

    newItems.Add(newItem);
}
Run Code Online (Sandbox Code Playgroud)

Kri*_*ris 5

没有简单的方法来做你所建议的事情,因为C#中的所有类型都是强类型的,甚至是你正在使用的匿名类型.然而,将它拉下来并非不可能.要做到这一点,你必须利用反射并在内存中发出自己的程序集,添加一个包含所需特定属性的新模块和类型.可以使用以下方法从您的匿名项获取属性列表:

foreach(PropertyInfo info in item.GetType().GetProperties())
    Console.WriteLine("{0} = {1}", info.Name, info.GetValue(item, null));
Run Code Online (Sandbox Code Playgroud)