我创建了一个Generic Repository类,如下所示:
public abstract class Repository<TEntity, TIdentifier> : IRepository<TEntity, TIdentifier> where TEntity : class
{
//TEntity is type of DBSet and TIdentifier is name of SQL Table's Id column
protected Repository(DbContext context)
{
Context = context;
DBSet = Context.Set<TEntity>();
}
}
在这个类中,我们有一个名为SelectAll
的方法如下:
[DataObjectMethod(DataObjectMethodType.Select, true)]
public IEnumerable<TEntity> SelectAll(IEnumerable<TIdentifier> ids, List<string> includeNavigationProperties = null)
{
ParameterExpression parameter = Expression.Parameter(typeof(TEntity), "entity");
MemberExpression leftParam = Expression.MakeMemberAccess(parameter, typeof(TEntity).GetProperty(IdentifierColumn));
Expression body = parameter;
foreach (TIdentifier identifier in ids)
{
var rightParam = Expression.Constant(identifier);
body = Expression.Or(body, Expression.Equal(leftParam, rightParam));//Exception
}
return (IEnumerable<TEntity>) DBSet.Select(Expression.Lambda<Func<TEntity, bool>>(body, parameter));
}
如您所见,我想在IEnumerable<TIdentifier> ids
中选择包含Id列的所有行。但是发生了以下异常:
二进制运算符Or未定义类型'DAL.Tag'和'System.Boolean'
答案 0 :(得分:2)
如果你在纸上执行逻辑,你会得到像
这样的东西可能不是你的意思,除非实体恰好是一个布尔。