我收到此错误:
ex = {"二元运算符 Equal 没有为类型 'MySite.Domain.DomainModel.EntityFramework.NickName' 和 'System.Int32' 定义。"}
我试图做的是选择所有NickNameId = someIntPassedIn
...问题是NickNameId是一个外键,所以当它比较时它someIntPassedIn
会NickNameId
拉出引用的整个NickName
对象NickNameId
并尝试比较int目的。
我需要一个解决方案来允许它将 int 与 NickName 对象的 Id 进行比较......所以
A)如何定义二元运算符 Equal 来比较这两个对象
或者
B)我怎样才能将它直接与 id 而不是整个对象进行比较?
您不必阅读此内容,但这里是 SelectAllByKey 方法以防万一:(
我传入了“NickNameId”和“1”)
public IList<E> SelectAllByKey(string columnName, string key)
{
KeyProperty = columnName;
int id;
Expression rightExpr = null;
if (int.TryParse(key, out id))
{
rightExpr = Expression.Constant(id);
}
else
{
rightExpr = Expression.Constant(key);
}
// First we define the parameter that we are going to use the clause.
var xParam = Expression.Parameter(typeof(E), typeof(E).Name);
MemberExpression leftExpr = MemberExpression.Property(xParam, this._KeyProperty);
int temp;
BinaryExpression binaryExpr = MemberExpression.Equal(leftExpr, rightExpr);
//Create Lambda Expression for the selection
Expression<Func<E, bool>> lambdaExpr = Expression.Lambda<Func<E, bool>>(binaryExpr, new ParameterExpression[] { xParam });
//Searching ....
IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(new Specification<E>(lambdaExpr));
if (null != resultCollection && resultCollection.Count() > 0)
{
//return valid single result
return resultCollection;
}//end if
return null;
}
如果您需要更多信息,请告诉我。
谢谢,
马特