0

レコードを選択しようとしています。dbには、1か月目と4か月目の2つのレコードがあります。

1か月目と4か月目の両方の値を取得する必要がありますが、取得するのは1か月目の値だけです(1か月目と4か月目)。

例:dB単位で月1の値は:55、月4の値は22ですが、コードで反復している間、月1と4の両方で値55を取得します。

  for (var month = 1; month <= 12; month++)
            {
    var itemMonth = month;
    var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && i.Month == itemMonth && i.Year==itemYear);
    //
    }
 if (itemAuditReport == null)
                    {
// Do Something
}

私は何かが足りないのですか?

4

4 に答える 4

1

John Sykorが提案したように、これを試してください:

for (var month = 1; month <= 12; month++)
{
  var itemMonth = month;
  var year = itemYear;
  var sku = itemSku;
  var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => 
      i.SKU == sku && i.Month == itemMonth && i.Year==year);
}

次の例で詳しく説明します。

これは 10 を 10 回出力します。

List<Action> actions = new List<Action>();
for (int i = 0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (Action action in actions)
{
    action();
}

しかし、次の出力 0...9 は期待どおり

List<Action> actions = new List<Action>();
for (int i = 0; i < 10; i++)
{
    var x = i; //<--important line
    actions.Add(() => Console.WriteLine(x));
}
foreach (Action action in actions)
{
    action();
}
于 2012-04-27T04:24:48.010 に答える
1

なぜあなたは試してみませんか

同じアイテムが反復で割り当てられて問題を引き起こしていると推測してitemAuditReportいるので、リストを利用してアイテムを追加します

List<Item> item = null;

for (var month = 1; month <= 12; month++)
{
 var itemMonth = month;
 var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && 
                       i.Month == itemMonth && i.Year==itemYear);
 if(itemAuditReport!=null)
   item.Add(itemAuditReport);
//
}
于 2012-04-26T18:12:09.600 に答える
1

これにより、エラーに関する洞察が得られます。 ラムダ式で反復変数を使用するのがなぜ悪いの ですか? 問題を解決するのに役立つものが見つかったらお知らせします。

于 2012-04-26T18:49:38.557 に答える
0

はい、Entity Framework モデルのキーが正しく設定されていませんでした。Sku がタイトル付きの主キーとして設定されていました。したがって、同じ結果セットが得られます。

Sku、Month、Year に適用されるキーを変更したところ、うまくいきました !!

于 2012-05-01T18:19:08.207 に答える