linqを使ってレコードを削除するときに奇妙な問題がありますが、それは範囲変数(source
)と関係があります。linq 'range variable'の問題
var q = from source in unitOfWork.GetRepository<db_Target>().Find()
where source.db_TargetBase.db_Person.fk_Customer == customerID
select source.FromLinq();
:
public static Target FromLinq(this db_Target source)
{
return new Target
{
id = source.id,
LastModified = source.db_TargetBase.LastModified,
...
}
}
レコードが削除された場合db_Target
とdb_TargetBase
の両方が削除されたレコードを削除した後、顧客のためのすべてのターゲットは、次のステートメントを使用して取得しています。たとえば、2人のユーザーがレコードを削除しているときに、linqはuser1によって削除されたuser2のレコードを取得しようとします。db_TargetBase
がnull
であるため、LastModified = source.db_TargetBase.LastModified
行でクラッシュします。次のコードを使用している場合
問題はoccureせず、唯一の非削除されたレコードが取得されています。ここでは何が起こっている
- :
var q = from source in unitOfWork.GetRepository<db_Target>().Find() where source.db_TargetBase.db_Person.fk_Customer == customerID select new Target { id = source.id, LastModified = source.db_TargetBase.LastModified, ... };
これには二つの質問を生成しますか?範囲変数
source
のコピーは、私が拡張メソッドで使用しているため作成していますか? return new Target
コードを「ラップする」方法はありますか?私はこれを複数の場所で使用しており、毎回コピーしたくありません。私のコードを保守しにくくする。コードの最初のセットでは
TIA、
JJ
あなたのおかげでありがとうございました。 私は今休暇中ですが、時間があれば実装をテストし、適切なフィードバックを与えます。 – user124936