私はLinq to Sqlを使用しています。私は(System.Linq)toList()メソッドを呼び出すときにトランザクションスコープを開きたいと思います。したがって、カスタム拡張クラスを作成してtoList()の新しいバージョンを作成することによって、デフォルトのtoList()メソッドをオーバーライドしようとしていました。しかし、カスタムのtoList()拡張の中で、私は既存のデフォルト(system.linq)ToList()メソッドを呼びたいと思います。しかし私はそれをすることができません。以下の例を参照してください。Linq既存のtoList()メソッドをオーバーライドする方法
コード:上記のコードで
public static int GetRecordsWithNoChangeToQuery()
{
string connection = ConfigurationManager.ConnectionStrings["EventConn"].ConnectionString;
using (var ctx = new EventsDataContext(connection))
{
var records = (from m in ctx.Event select m).ToList(); //calling custom extension method
return records.Count();
}
}
LinqExtenionHeler
public static class LinqExtension
{
public static TransactionScope CreateLockTransaction()
{
var options = new TransactionOptions
{
IsolationLevel = IsolationLevel.ReadCommitted
};
return new TransactionScope(TransactionScopeOption.Required, options);
}
//custom extension method
public static List<T> ToList<T>(this IEnumerable<T> query)
{
using (TransactionScope ts = CreateLockTransaction())
{
return query.ToList(); //fails, not able to call system.linq .toList method
}
}
}
私はquery.ToList(呼び出したとき)、エラーをitsthrows。として、それは自分自身を呼び出すしようとしている。どのように同じ名前カスタム拡張メソッドからデフォルト(syste.linq)query.toList()を呼び出すには?
AS-synataxこのメソッドに別の名前を付ける必要があります。そうしないと、価値が追加されるよりも混乱が生じます。 – Servy
'System.Linq.Enumerable.ToList(クエリ)'(でもServyが言ったこと) –
Dennisに感謝します。それは動作します –