2012-04-26 172 views
0

我试图选择一条记录。 在db中,我有第一个月和第四个月的两个记录。LINQ实体框架选择记录

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

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 
} 

我错过了什么吗?

+1

你的代码很好。仔细检查你的数据或者运行下面的sql来查看你是否得到相同的结果。 select * from itemAuditReport i where i.SKU = itemSku && i.Month = 1 && i.Year = itemYear; select * from itemAuditReport i where i.SKU = itemSku && i.Month = 4 && i.Year = itemYear; – 2012-04-26 18:25:23

+0

如果我通过明确指定月份为1和4来运行代码,我会得到正确的不同结果。所以肯定有些代码是错误的。 – Nanu 2012-04-26 23:38:55

回答

0

是的,在实体框架模型按键没有设置正确,SKU设定为与标题主键。在模型中,因此带来相同的结果集。

我改变了要应用在Sku,Month和Year上的密钥,它工作的很棒!

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); 
// 
} 
+0

这个解决方案可以解决你的问题,但之前我碰到过类似的问题,但原因不同。我还建议在有机会时定义明显的类型,并为不明确的类型留下变量。 – 2012-04-26 19:04:26

+0

我不明白这与OP的代码有什么不同。 itemAuditReport会得到相同的结果,但你只是检查它是否为null。 OP的问题是itemAuditReport获取无效结果。 – 2012-04-27 04:19:07

+0

@RayCheng - 即时通讯推送列表中的数据不使用该变量后fatching记录...这可能是问题的原因... – 2012-04-27 04:20:29

1

像约翰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(); 
} 
+0

我已经指定一个单独的变量来保存月份的值。 – Nanu 2012-05-01 16:59:06