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
}
我错过了什么吗?
你为什么不试试呢
我猜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、月份和年份的键,效果很好!