假设我有这个方法:
public T GetByID(object[] pKeys)
{
DbQuery<T> dbq = mContext.GetDbSet<T>();
return dbq.SingleOrDefault(ent => ent.PrimaryKey.SequenceEqual(pKeys));
}
ent.PrimaryKey
是一个object[]
。
当然,这不起作用,因为SequenceEqual()
. 我也许可以使用Contains
,但这不会保留顺序:{1, 2} 不等于 {2, 1}。
我也可以AsEnumerable()
先使用然后使用一些逻辑,但这会将整个表加载到内存中,这是不可接受的。
有没有办法做到这一点?
编辑
我已经使方法通用。因为这就是它的真正含义,并且主键是一个数组更有意义。
我还指出,这里方法的目标可以通过 mContext.GetDbSet().Find(pKeys) 来实现。然而,这使得使用dbq.Include(property)
或mContext.Entry(wanted).Collection(property).Load()
用于 parent.child 属性变得复杂,这是与问题无关的另一件事。