我试图使用动态linq查询从对象集合(Linq到Object)检索IEnumerable <T>,每个对象都在该集合具有一个内部集合,其中包含另一组存储数据的对象,这些值可通过外部集合中的索引器访问Dynamic Linq - 对包含“dynamic”类型的成员执行查询
当您使用强类型对象时,动态linq查询将按预期返回过滤集但我的对象将数据存储在动态类型的成员中,请参阅下面的示例:
public class Data
{
public Data(string name, dynamic value)
{
this.Name = name;
this.Value = value;
}
public string Name { get; set; }
public dynamic Value { get; set; }
}
public class DataItem : IEnumerable
{
private List<Data> _collection;
public DataItem()
{ _collection = new List<Data>(); }
public dynamic this[string name]
{
get
{
Data d;
if ((d = _collection.FirstOrDefault(i => i.Name == name)) == null)
return (null);
return (d.Value);
}
}
public void Add(Data data)
{ _collection.Add(data); }
public IEnumerator GetEnumerator()
{
return _collection.GetEnumerator();
}
}
public class Program
{
public void Example()
{
List<DataItem> repository = new List<DataItem>(){
new DataItem() {
new Data("Name", "Mike"),
new Data("Age", 25),
new Data("BirthDate", new DateTime(1987, 1, 5))
},
new DataItem() {
new Data("Name", "Steve"),
new Data("Age", 30),
new Data("BirthDate", new DateTime(1982, 1, 10))
}
};
IEnumerable<DataItem> result = repository.AsQueryable<DataItem>().Where("it[\"Age\"] == 30");
if (result.Count() == 1)
Console.WriteLine(result.Single()["Name"]);
}
当我运行上面的例子,我得到:操作“==”与操作数类型的“对象”不兼容和“的Int32”
是动态成员动态LINQ查询不兼容?或者是有处理动态
与会员处理正当评估时的另一种构建表达方式非常感谢您的帮助。
那他们不是真的'兼容'吗? – 2012-01-12 02:38:43
谢谢,当我们事先知道该值的运行时类型时,该解决方案工作正常,但如何以编程方式构建查询时,我们不会真正知道如何在事先手动转换值。有没有其他方式可以建立一个表达式? – Darsegura 2012-01-12 03:33:45
@ M.Babcock:取决于你对'兼容'的定义。 – afrischke 2012-01-12 10:38:34