0

FinancialCompliances と Compliance テーブルがあります。私のクエリワークフローの下にあるのは、最新の行を1つ取得することです。問題は、テーブル内のすべての行を削除したため、テーブルに空の値があることです。しかし、以下のクエリは古い行を1つ返します。

var Compliance = (from c in datamodel.Compliances
                              join f in datamodel.FinancialCompliances on c.ComplianceId equals f.ComplianceId
                              where (c.VerifierId == userId || c.OwnerId == userId || c.UserId == userId) && (f.ComplianceId == c.ComplianceId)
                              orderby (f.AddedDate)
                              select f);

            financialCompliance = Compliance.ToList().LastOrDefault();

何が問題ですか?

4

3 に答える 3

0

コードの明らかな問題の 1 つは、LastOrDefault() の前に ToList() を呼び出していることです。これにより、コードはすべてのデータをストレージからアプリケーションとコンテキストにロードし、結果から最後のオブジェクトを取得します。これにより、いくつかの問題が発生する可能性があると思います。

.ToList() をスキップして LastOrDefault() を直接呼び出してみてください。

于 2013-04-04T18:16:31.637 に答える
0

おそらく、lastordefalt がデフォルト値を送信しています。返されるオブジェクトに実際のデータがあることを確認していただけますか? そんなことはないと思います。

于 2013-04-04T17:11:48.163 に答える
0

データモデル インスタンス内のオブジェクトを削除しているように思えますが、変更を保存してデータモデルをリセットしないため、データベースになくても古いレコードがコンテキスト内に保持されます。安全のために、このクエリに新しいコンテキストを使用してみてください。

また、結果を昇順で並べ替えて最後のものだけを取得するのではなく、結果を降順で並べ替えてから一番上のものを選択するようにクエリを変更することを検討することもできます。

var Compliance = (from c in datamodel.Compliances
                  join f in datamodel.FinancialCompliances on c.ComplianceId equals f.ComplianceId
                  where (c.VerifierId == userId || c.OwnerId == userId || c.UserId == userId) && (f.ComplianceId == c.ComplianceId)
                  orderby (f.AddedDate) descending
                  select f);

financialCompliance = Compliance.FirstOrDefault();
于 2013-04-04T19:32:55.413 に答える