我得到这个错误:如何将entityframework对象的自定义比较(二元运算符Equal的定义)写入int?
ex = {"The binary operator Equal is not defined for the types 'MySite.Domain.DomainModel.EntityFramework.NickName' and 'System.Int32'."}
我试图做的是做一个选择都在NickNameId = someIntPassedIn
...问题是,NickNameId是一个外键,所以当它比较someIntPassedIn
到NickNameId
它拉动NickNameId
引用的整个NickName
对象,并尝试将int与该对象进行比较。
我在这里需要一个解决方案,使其能够比较的int昵称对象的ID ......所以
A)我如何定义二元运算符平等比较这两个对象
OR
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;
}
让我知道如果你需要更多的信息。
谢谢
马特
你是上帝!非常感谢! – Matt 2009-12-20 22:31:49