作業員を追跡するASP.NETコアアプリケーションがあります。 WorkCrewMembers
は乗組員を含むクラスです。それはWorkCrew
クラスの鍵を持っていて、このクルーがいつ特定の曜日に作業するかを指定するTimeSpan?
のフィールドが多少不器用なリストを持っています:SunStart, MonStart, TueStart, WedStart, ThuStart, FriStart, SatStart
。クラスはレガシーデータベースから生成されます。私はm.WorkCrew.TodayStartTime()
に沿って、次のエラーを取得しています、私は1.1にパッケージをアップグレードする場合、1.0.1.NET Core 1.1プレビュー1にアップグレードした後、LINQ文が壊れました
public class Program
{
public static void Main(string[] args)
{
using (DBContext context = new DBContext()) {
var lstWorkCrew = (from m in context.WorkCrewMembers
where m.WorkCrew.TodayStartTime() != null
select m.WorkCrewId).ToList();
Console.WriteLine($"Today {lstWorkCrew.Count} work crews");
}
}
}
public partial class WorkCrew {
public TimeSpan? TodayStartTime() {
TimeSpan?[] starts = {
SunStart, MonStart, TueStart, WedStart, ThuStart, FriStart, SatStart
};
int dayOfWeek = (int)DateTime.Now.DayOfWeek;
return starts[dayOfWeek];
}
}
しかしASP.NETコアで楽しそうに働いていた次のコードを持っている:
未処理の例外:System.ArgumentExceptionの:メソッド 'System.Nullable`1【のSystem.TimeSpan] TodayStartTimeは()' タイプで宣言 'WorkCrew '可能System.Int32'
興味深いタイプのインスタンスで呼び出すことができません私がすればfrom w in context.WorkCrew where w.TodayStartTime() != null select w
それはうまく動作します。
1.1の大きな変更ですか?それとも、私のコードが合法ではないため、例外を先に投げるべきものですか?あるいは単にMicrosoftが修正するバグ?
ああを使用する必要があります! (何らかの理由で 'm.WorkCrew'がnullになったようです!)最初に' var wcm = context.WorkCrewMembers.ToList() 'を取得し、' wcm.Where(m =>) m.WorkCrew?.TodayStartTime()) ' - 例外は発生しませんが、* all *' m.WorkCrew'がnullの場合と同様に0行が返されます – Felix
申し訳ありません、これは本当にバグのようですこのシンプルスニペットがどのようにこのタイプのエラーを生成するかを見てください。ここで何か問題がある場合にコンパイルすることはできません。クラス内のどこかに隠れたリフレクションコールをしないといいでしょう。 –
ありがとう。いいえ - ここに隠された魔法はありません:) – Felix