Linq to SQL: Equivalent of Array.SequenceEqual
本文关键字:of Array SequenceEqual Equivalent to SQL Linq | 更新日期: 2023-09-27 18:32:12
假设我有这个方法:
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()来实现。查找(pKeys)。但是,这使得 parent.child 属性使用 dbq.Include(property)
或 mContext.Entry(wanted).Collection(property).Load()
变得复杂,这是与问题无关的另一件事。
如果没有可重现的代码,测试任何特定的解决方案都有点困难,但是我想到的第一件事(并在记事本中编译/测试)是
public T GetByID(object[] pKeys)
{
DbQuery<T> dbq = mContext.GetDbSet<T>();
for (var i = 0; i < pKeys.length; i++)
{
dbq = dbq.Where(ent => ent.PrimaryKey[i] == pKeys[i]);
}
return dbq.SingleOrDefault();
}