我正在尝试使用动态 Linq 查询从对象集合(Linq to Object)中检索 IEnumerable<T>,集合中的每个对象都有一个内部集合,其中包含另一组存储数据的对象,通过外部集合的索引器访问这些值。
当您使用强类型对象时,动态 Linq 查询会按预期返回过滤后的集合,但是我的对象将数据存储在 dynamic 类型的成员中,请参见以下示例:
当我运行以上示例时,我收到以下错误信息:运算符“==”与操作数类型“对象”和“Int32”不兼容。 dynamic成员是否与动态Linq查询不兼容?或者在处理类型为dynamic的成员时,是否有另一种构造表达式的方法可以正确评估?
非常感谢您的帮助。
当您使用强类型对象时,动态 Linq 查询会按预期返回过滤后的集合,但是我的对象将数据存储在 dynamic 类型的成员中,请参见以下示例:
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”不兼容。 dynamic成员是否与动态Linq查询不兼容?或者在处理类型为dynamic的成员时,是否有另一种构造表达式的方法可以正确评估?
非常感谢您的帮助。
val.ToString()
的结果是一个包含"
或\\
的字符串,会怎么样? - binki