我现在想比较一下结构字符串
public Entity GetByPropertyValue<ValueType>(string propertyName, ValueType value)
{
var contact = (from contacts in OrganizationContext.CreateQuery("contact")
where (ValueType)contacts[propertyName] == value
select contacts).FirstOrDefault();
return contact;
}
但是问题是:
运算符'=='不能应用于类型'ValueType'的操作数,并且 'ValueType'
如果不这样做
where object.Equals((ValueType)contacts[propertyName], value)
不幸的是它将无法正常工作
System.NotSupportedException:无效的“ where”条件。实体 成员正在调用无效的属性或方法。
答案 0 :(得分:1)
这可能是需要手动构建表达式树的情况。没有您的代码,我无法进行测试,但是类似:
public Entity GetByPropertyValue<T>(string propertyName, T value)
{
var p = Expression.Parameter(typeof(Entity));
var body = Expression.Equal(
Expression.PropertyOrField(p, propertyName),
Expression.Constant(value, typeof(T)));
var lambda = Expression.Lambda<Func<Entity, bool>>(body, p);
return OrganizationContext.CreateQuery("contact").Where(lambda).FirstOrDefault();
}
最后一行也可能会被重写:
return OrganizationContext.CreateQuery("contact").FirstOrDefault(lambda);
请注意,尽管这看起来很冗长,但这实际上是C#编译器始终为基于表达式树的谓词生成 的内容。因此:它对代码的实际性能并没有任何影响-它仍在做相同的事情。