0

我试图选择一条记录。在 db 中,我有第 1 个月和第 4 个月的两条记录。

我需要获取第 1 个月和第 4 个月的值,但我得到的只是迭代中两次(第 1 个月和第 4 个月)中第 1 个月的值。

EX:以 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

你为什么不试试

我猜这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

这将使您对错误有所了解。 为什么在 lambda 表达式中使用迭代变量不好 如果我找到可以帮助您解决问题的方法,我会告诉您。

于 2012-04-26T18:49:38.557 回答
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 十次。

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 回答
0

是的,实体框架模型中的键设置不正确,Sku 被设置为带标题的主键。在模型中,因此带来相同的结果集。

我更改了要在 Sku、月份和年份上应用的密钥,效果很好!

于 2012-05-01T18:19:08.207 回答