C#foreach循环不迭代项目

时间:2015-06-22 14:52:35

标签: c# foreach

尝试使用List的内容填充数据网格,但之后列表包含正确数量的项目,所有项目都具有相同的数据行。例如,当press = 8时,SQL中返回了三个不同的批次,但在C#中有一个批次返回三次。我不确定问题是出现在我的查询还是foreach循环中 - 但我在循环期间使用了一个消息框来显示当前的ScheduleNr,它始终是相同的。

            List<BatchList> myBatches = new List<BatchList>();
            BatchList batch;
            var db = new BatchListContext();
            var batchQuery = from b in db.BatchLists
                        where b.Press == press
                        orderby b.ExtrDate, b.BatchNr
                        select b;
            if (batchQuery.Count() == 0)
            {
                MessageBox.Show("Error loading batches", "Error", MessageBoxButton.OK);
                return false;
            }
            foreach (var batchItem in batchQuery)
            {
                batch = new BatchList();
                batch.ScheduleNr = batchItem.ScheduleNr;
                batch.BatchNr = batchItem.BatchNr;
                batch.Press = batchItem.Press;
                batch.ExtrDate = batchItem.ExtrDate;
                batch.NoOrders = batchItem.NoOrders;
                myBatches.Add(batch);
                MessageBox.Show(String.Format("{0}", batchItem.ScheduleNr.ToString())); //Always shows same ScheduleNr
            }

如果我犯了一个根本性的错误,我将不胜感激。

非常感谢。

// EDIT BatchList是一个SQL Server视图,如果在SSMS中按如下方式查询:

SELECT * FROM BilletPlanner.BatchList WHERE Press = 8

返回:

ScheduleNr  BatchNr Press   ExtrDate    NoOrders
10035620    2       8       2015-06-22      32
10035629    3       8       2015-06-22      22
10035631    4       8       2015-06-23      32

但我在C#中使用的DataGrid显示以下内容(原始副本当前无法粘贴图像)

ScheduleNr  BatchNr Press   ExtrDate    NoOrders
10035620    2       8   22/06/2015      32
10035620    2       8   22/06/2015      32
10035620    2       8   22/06/2015      32

1 个答案:

答案 0 :(得分:1)

假设这是访问SQL Server视图的实体框架:EF中视图的常见问题是主要关键混淆。 EF倾向于尝试通过元数据中可以看到的数据类型从视图中确定什么是真正唯一的值。我建议调整你的视图以获得一个明确的唯一主键(强制转换为int,不同之处)。基本上EF使其他列之一(按下,NoOrders)混淆为主键,重复值表示EF复制整行。这是一个非常愚蠢的问题。