0

さまざまな燃料タイプの燃料価格データを保持するテーブルがあります。各行には ID と日付があり、燃料の種類ごとに 5 つの列があります。値が 0 ではない各燃料タイプのデータの最後の行の日付を決定するための linq クエリを思いつくのに問題があります (行が挿入され、特定の燃料タイプに対して燃料価格が利用できなかった場合、挿入された値はセルが null 可能ではないため、その燃料タイプはゼロです)。

LastorDefault を使用してみましたが、特定のタイプの最後の日付がテーブルの最後の行にない場合があるため、うまくいきません。

4

1 に答える 1

0

linq(およびSQL)クエリをデバイス化できる場合があります。ただし、正規化された構造用に作成された言語で非正規化されたものを処理すると、通常、ネストされたステートメントが繰り返されて混乱します(そして効率の悪いクエリプランになります)。とにかく繰り返しがあるので、通常のforeachを使用して、できるだけ単純に保ちます。

var result = new FuelPriceSummary();
foreach(var price in context.FuelPriceData.OrderBy(p => p.Date).ToList())
{
    if (price.Price1 > 0)
        {result.Price1 = price.Price1; result.Date1 = price.date;}
    if (price.Price2 > 0)
        {result.Price2 = price.Price2; result.Date2 = price.date;}
    if (price.Price3 > 0)
        {result.Price3 = price.Price3; result.Date3 = price.date;}
    if (price.Price4 > 0)
        {result.Price4 = price.Price4; result.Date4 = price.date;}
    if (price.Price5 > 0)
        {result.Price5 = price.Price5; result.Date5 = price.date;}
}

可能であれば、データベース設計を正規化します。クエリがはるかに簡単になります。

于 2012-12-03T21:56:48.693 に答える