LINQ 实体框架 选择一条记录

本文关键字:一条 记录 选择 框架 实体 LINQ | 更新日期: 2023-09-27 18:32:25

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

我需要获取第 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
}

我错过了什么吗?

LINQ 实体框架 选择一条记录

你为什么不试试呢

我猜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);
//
}

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

就像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();
}
是的

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

我更改了要应用于 Sku、月份和年份的键,效果很好!