Guid
1 つのクエリからID (タイプ) を取得する必要があります。
var firstQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
select new
{
ContPrice = conts.Price,
RoomPrice = rooms.Price
IDs = rooms.ID
};
foreach (var t in firstQuery)
{
t.RoomPrice = t.ContPrice;
}
それから何らかの操作 (価格の更新) を行い、最後に 2 番目のクエリで ID を使用します。その 2 番目のクエリには、これらの ID が含まれていません。この問題を次のように実装しました。
var myIDs = firstQuery.Select(cr => cr.IDs).ToList();
そして、私の2番目のクエリは次のとおりです。
var secondQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
where !myIDs.Contains(rooms.fldID)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
select new
{
RoomPrice = conts.fldPrice,
IDs = rooms.ID
};
このコードをデバッガー モードで実行すると、次の行に到達します。
var myIDs = firstQuery.Select(cr => cr.IDs).ToList();
...例外が発生します:
NullReferenceException
オブジェクト参照がオブジェクトのインスタンスに設定されていません。
2番目のクエリを別のメソッドに転送してIDを渡すとすべてが完全に機能するため、2番目のクエリと関係があるようですが、変数の後に記述されたクエリを考慮する必要がある理由がわかりません初期化中。
コード全体は次のとおりです。
var calcDate = DateTime.Now.AddDays(-1);
var firstQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
where conts.date == calcDate
select new
{
ContPrice = conts.Price,
RoomPrice = rooms.Price
IDs = rooms.ID
};
foreach (var t in firstQuery)
{
t.RoomPrice = t.ContPrice;
}
var myIDs = firstQuery.Select(cr => cr.IDs).ToList();
var secondQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
where !myIDs.Contains(rooms.fldID)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
where conts.date == calcDate && conts.Code = "01"
select new
{
RoomPrice = conts.fldPrice,
IDs = rooms.ID
};
foreach (var t in secondQuery)
{
ContPrice = Conts.Price,
RoomPrice = Rooms.Price
}
myEntityContext.SaveChanges();
役に立つ場合は、これが私のスタック トレースです。
Financial.UI.dll!Financial.UI.Services.Hotels.HotelServiceProxy.CalcProxy.DoCalc(System.DateTime calcDate) 行 5055 C# Financial.UI.dll!Financial.UI.Pages.Hotel.NightsCalculationPage.CallbackMethod_DoCalc() 65 行目 + 0x37 バイト C# [管理された移行にネイティブ] Web.UI.dll!Web.UI.SystemCallback.ProcessCallback() 行 228 + 0x3b バイト C# Web.UI.dll!Web.UI.SystemCallbackHandler.ProcessRequest(System.Web.HttpContext コンテキスト) 68 行目 + 0x12 バイト C# System.Web.dll!System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x156 バイト System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep ステップ、ref bool completedSynchronously) + 0x46 バイト System.Web.dll!System.Web.HttpApplication.PipelineStepManager.ResumeSteps(System.Exception エラー) + 0x342 バイト System.Web.dll!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext コンテキスト、System.AsyncCallback cb) + 0x60 バイト System.Web.dll!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest wr, System.Web.HttpContext コンテキスト) + 0xbb バイト System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr rootedObjectsPointer、System.IntPtr nativeRequestContext、System.IntPtr moduleData、int フラグ) + 0x1f3 バイト System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr rootedObjectsPointer、System.IntPtr nativeRequestContext、System.IntPtr moduleData、int フラグ) + 0x1f バイト [管理された移行にネイティブ] 【マネージドからネイティブへの移行】 System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr rootedObjectsPointer、System.IntPtr nativeRequestContext、System.IntPtr moduleData、int フラグ) + 0x350 バイト System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr rootedObjectsPointer、System.IntPtr nativeRequestContext、System.IntPtr moduleData、int フラグ) + 0x1f バイト 【アプリドメイン移行】