关于System.Linq.Dynamic的问题

时间:2011-09-13 11:39:53

标签: linq dynamic

我有一个关于使用System.Linq.Dynamic程序集中的一些功能的问题。

我需要使用像“@”NOT(Person.Name =“”test“”)这样的查询,例如,现在的问题是我没有某种对象类型,而是需要读取属性名称及其值(可能是类型,虽然我实际上必须从值中推断出类型)...我通过使用反射(在运行时根据需要创建类型和属性)解决了这个问题....但我仍然想知道这是不是可能没有创建类型和属性,但使用匿名类型(我基本上不需要输入那些类型,只需要值...当然我可以编写代码来找出为ex输入的值的类型它有引号 - 这意味着它是一个字符串......),或者如果.Net中有另一个库来完成这个任务(我没有太多时间来查看Dynamic类......它是如何工作的等等)

1 个答案:

答案 0 :(得分:0)

Dynamic Linq解析器总是需要一个实际类型来解析,因为它将动态表达式解析为System.Linq.Expression表达式树,它们基于类型。但是,Dynamic Linq库包含一种在运行时快速创建此类匿名类型的方法。以下是使用它的示例(取自随DynamicLinq.cs文件打包的html文档文件):

DynamicProperty[] props = new DynamicProperty[] {
    new DynamicProperty("Name", typeof(string)),
    new DynamicProperty("Birthday", typeof(DateTime)) };
Type type = DynamicExpression.CreateClass(props);
object obj = Activator.CreateInstance(type);
t.GetProperty("Name").SetValue(obj, "Albert", null);
t.GetProperty("Birthday").SetValue(obj, new DateTime(1879, 3, 14), null);
Console.WriteLine(obj);