C#匿名类、对象(Linq中应用)与反射

 

①定义一个匿名类和对象

int objA = 1; 
string objB = "hello"; 
object anonymous = new { objA, objB };

 

在第三行中,我们即定义了一个拥有两个成员变量,一个是类型为int,变量名为objA,另一个类型为string,变量名为objB的类;也实例化了一个这个匿名类的对象anonymous,对象的成员变量objA的值为1,成员变量objB的值为“hello”。

 

②使用反射获取匿名类的对象的值

            Type type = anonymous.GetType();
            //获取到类的所有成员变量信息
            PropertyInfo[] infos = type.GetProperties();
            foreach(PropertyInfo info in infos){
                string propertyType = info.PropertyType.ToString();
                string propertyName = info.Name;
                object propertyValue = info.GetValue(anonymous);
                Console.WriteLine(propertyType + " " + propertyName + ":" + propertyValue);
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 使用 LINQ 进行动态查询对象,可以使用 `System.Linq.Expressions` 库。这个库提供了一种将 LINQ 查询表达式表示为树形结构的方式,可以在运行时动态构建和修改这个树形结构。下面是一个示例代码: ```csharp using System.Linq.Expressions; string propertyName = "Name"; string propertyValue = "Tom"; var parameter = Expression.Parameter(typeof(MyClass), "x"); var property = Expression.Property(parameter, propertyName); var constant = Expression.Constant(propertyValue); var equal = Expression.Equal(property, constant); var lambda = Expression.Lambda<Func<MyClass, bool>>(equal, parameter); var query = list.Where(lambda); ``` 在这个示例,我们首先定义了要查询的属性名和属性值。然后,我们使用 `Expression.Parameter` 方法创建了一个类型为 `MyClass` 的参数表达式,并命名为 `x`。接着,我们使用 `Expression.Property` 方法创建了一个属性表达式,表示要查询的属性。然后,我们使用 `Expression.Constant` 方法创建了一个常量表达式,表示属性值。接着,我们使用 `Expression.Equal` 方法创建了一个相等比较表达式,将属性表达式和常量表达式作为参数。最后,我们使用 `Expression.Lambda` 方法将比较表达式和参数表达式组合成一个 lambda 表达式,并定义了返回类型为 `bool` 的委托类型。这个 lambda 表达式表示了一个动态查询条件。我们可以将这个 lambda 表达式作为参数传递给 LINQ 查询的 `Where` 方法,即可完成动态查询。 需要注意的是,使用 `System.Linq.Expressions` 库进行动态查询时,需要熟悉 LINQ 查询表达式的语法和结构,才能正确构建和修改查询树形结构。 希望这个答案能够解决您的问题。如果您有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值