泛型方法和谓词的问题

时间:2011-07-18 13:45:46

标签: c# linq

我目前有这种通用方法:

    public virtual T Get(Expression<Func<T, bool>> predicate)
    {
        return this.Query.Where(predicate).FirstOrDefault();
    }

以下是我如何调用该方法的示例:

ST = testTable.Get( u => u.PartitionKey == pKey & u.RowKey == rKey );

我真的不太了解泛型,我需要做的是有一个方法将partitionKey和rowKey作为参数并执行Get。像这样:

ST = testTable.Get(pkey,rkey);

那里有谁知道我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

你需要创建一个带有这些参数的函数,并使用一个使用参数的lambda表达式调用第一个函数。

public T Get(pkey,rkey)
{
    return Get(u => u.PartitionKey == pKey & u.RowKey == rKey);
}

如果T不限于继承具有这些属性的类型,则需要创建一个扩展方法,该方法使用具有这些属性的类型参数扩展您的类。

答案 1 :(得分:2)

  

那里有谁知道我怎么能这样做?

是的,但我不会将方法命名为Get。我会这样做:

public T GetByPartitionKeyAndByRowKey<T>(int partitionKey, int rowKey) {
    return Get(u => u.PartitionKey == partitionKey && rowKey == rowKey);
}

我假设您的域类中的两个属性PartitionKeyRowKeyint。你可以相应地改变。

我想知道你为什么要使用泛型。它看起来像一个实例方法,它看起来像是在某个表中调用,对于某些具有IEnumerable<T>T的{​​{1}},它可能会实现PartitionKey。如果你一直在做,那么泛型是什么意思?

此外,为什么这种方法RowKey

答案 2 :(得分:0)

这样的事情?

public virtual T Get(string pkey, string rkey)
{
    return this.Query.Where(u=>u.PartitionKey == pkey && u.RowKey==rkey).FirstOrDefault();
}