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() 变得复杂,这是与问题无关的另一件事。

Linq to SQL: Equivalent of Array.SequenceEqual

如果没有可重现的代码,测试任何特定的解决方案都有点困难,但是我想到的第一件事(并在记事本中编译/测试)是

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();
}