Linq to SQL:Array.SequenceEqual的等价物

时间:2013-09-20 12:50:14

标签: c# linq linq-to-sql

假设我有这种方法:

public T GetByID(object[] pKeys)
{
    DbQuery<T> dbq = mContext.GetDbSet<T>();
    return dbq.SingleOrDefault(ent => ent.PrimaryKey.SequenceEqual(pKeys));
}

ent.PrimaryKeyobject[]

当然,由于SequenceEqual(),这不起作用。我可以使用Contains但这不会保留顺序:{1,2}不等于{2,1}。

我也可以先使用AsEnumerable()然后使用一些逻辑,但这会将整个表加载到内存中,这是不可接受的。

有没有办法实现这个目标?

修改

我已经将该方法设为通用的。因为这就是它的真实含义,而且主键是一个阵列会让人更加敏感。

我还指出,这里的方法的目标可以通过mContext.GetDbSet()实现。查找(pKeys)。然而,这使得dbq.Include(property)mContext.Entry(wanted).Collection(property).Load()对于parent.child属性的使用变得复杂,这是与该问题无关的另一个问题。

1 个答案:

答案 0 :(得分:0)

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

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