c# - linq 相当于 'select *' sql 的通用函数?

标签 c# linq generics anonymous-types

我有一个通用<>函数,它接受一个 linq 查询('items')并通过它枚举添加额外的属性。如何选择原始“项目”的所有属性而不是项目本身(如以下代码所示)?

等同于 sql: select *, 'bar' as Foo from items

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

最佳答案

没有简单的方法可以执行您的建议,因为 C# 中的所有类型都是强类型的,即使是您使用的匿名类型也是如此。然而,将其拉下来并非不可能。为此,您必须利用反射并在内存中发出您自己的程序集,添加一个新模块和包含您想要的特定属性的类型。可以使用以下方式从您的匿名项目中获取属性列表:

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

关于c# - linq 相当于 'select *' sql 的通用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109934/

相关文章:

c# - 在运行时动态地将代码添加到方法的开头/结尾

c# - SignInManager.PasswordSignIn 第一次尝试很慢

c# - 如何使用 C# 从列表中选择随机对象?

java - 如何保证泛型类型的类型

c# - 触发 HttpClient 的更简单方法(可能没有任务)?

c# - Entity Framework 6 : How do I find a previously found record?

c# - 在一个解决方案中调用来自不同项目的方法

.net - 在 Visual Studio 中处理 VB.NET Linq 格式?

generics - 如何获取对指定类型的泛型类的构造函数的引用?

具有多个声明的 Java 泛型